aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorJoonsoo Kim <iamjoonsoo.kim@lge.com>2013-12-02 03:49:41 -0500
committerPekka Enberg <penberg@kernel.org>2014-02-08 05:12:06 -0500
commitf315e3fa1cf5b3317fc948708645fff889ce1e63 (patch)
tree2c7e3db6b372504ca115c5dcd2b23a8996e4a06a /include
parente5c58dfdcbd36f6b4c4c92c31cf6753d22da630a (diff)
slab: restrict the number of objects in a slab
To prepare to implement byte sized index for managing the freelist of a slab, we should restrict the number of objects in a slab to be less or equal to 256, since byte only represent 256 different values. Setting the size of object to value equal or more than newly introduced SLAB_OBJ_MIN_SIZE ensures that the number of objects in a slab is less or equal to 256 for a slab with 1 page. If page size is rather larger than 4096, above assumption would be wrong. In this case, we would fall back on 2 bytes sized index. If minimum size of kmalloc is less than 16, we use it as minimum object size and give up this optimization. Signed-off-by: Joonsoo Kim <iamjoonsoo.kim@lge.com> Signed-off-by: Pekka Enberg <penberg@kernel.org>
Diffstat (limited to 'include')
-rw-r--r--include/linux/slab.h11
1 files changed, 11 insertions, 0 deletions
diff --git a/include/linux/slab.h b/include/linux/slab.h
index 9260abdd67df..d015dec02bf3 100644
--- a/include/linux/slab.h
+++ b/include/linux/slab.h
@@ -201,6 +201,17 @@ struct kmem_cache {
201#ifndef KMALLOC_SHIFT_LOW 201#ifndef KMALLOC_SHIFT_LOW
202#define KMALLOC_SHIFT_LOW 5 202#define KMALLOC_SHIFT_LOW 5
203#endif 203#endif
204
205/*
206 * This restriction comes from byte sized index implementation.
207 * Page size is normally 2^12 bytes and, in this case, if we want to use
208 * byte sized index which can represent 2^8 entries, the size of the object
209 * should be equal or greater to 2^12 / 2^8 = 2^4 = 16.
210 * If minimum size of kmalloc is less than 16, we use it as minimum object
211 * size and give up to use byte sized index.
212 */
213#define SLAB_OBJ_MIN_SIZE (KMALLOC_SHIFT_LOW < 4 ? \
214 (1 << KMALLOC_SHIFT_LOW) : 16)
204#endif 215#endif
205 216
206#ifdef CONFIG_SLUB 217#ifdef CONFIG_SLUB