diff options
| author | Joonsoo Kim <iamjoonsoo.kim@lge.com> | 2014-03-12 04:06:19 -0400 |
|---|---|---|
| committer | Pekka Enberg <penberg@kernel.org> | 2014-04-01 06:38:04 -0400 |
| commit | 24f870d8f0adcd38639f2f66e37aa7591a3fc408 (patch) | |
| tree | be36bd3e209e78faff043fda65337749b3bee7dc | |
| parent | 80c3a9981a544b6e96debfbcca5190b727ecd09e (diff) | |
slab: fix wrongly used macro
commit 'slab: restrict the number of objects in a slab' uses
__builtin_constant_p() on #if macro. It is wrong usage of builtin
function, but it is compiled on x86 without any problem, so I can't
find it before 0 day build system find it.
This commit fixes the situation by using KMALLOC_MIN_SIZE, instead of
KMALLOC_SHIFT_LOW. KMALLOC_SHIFT_LOW is parsed to ilog2() on some
architecture and this ilog2() uses __builtin_constant_p() and results in
the problem. This problem would disappear by using KMALLOC_MIN_SIZE,
since it is just constant.
Tested-by: David Rientjes <rientjes@google.com>
Signed-off-by: Joonsoo Kim <iamjoonsoo.kim@lge.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
| -rw-r--r-- | include/linux/slab.h | 22 |
1 files changed, 11 insertions, 11 deletions
diff --git a/include/linux/slab.h b/include/linux/slab.h index d015dec02bf3..5df89f777a54 100644 --- a/include/linux/slab.h +++ b/include/linux/slab.h | |||
| @@ -201,17 +201,6 @@ 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) | ||
| 215 | #endif | 204 | #endif |
| 216 | 205 | ||
| 217 | #ifdef CONFIG_SLUB | 206 | #ifdef CONFIG_SLUB |
| @@ -253,6 +242,17 @@ struct kmem_cache { | |||
| 253 | #define KMALLOC_MIN_SIZE (1 << KMALLOC_SHIFT_LOW) | 242 | #define KMALLOC_MIN_SIZE (1 << KMALLOC_SHIFT_LOW) |
| 254 | #endif | 243 | #endif |
| 255 | 244 | ||
| 245 | /* | ||
| 246 | * This restriction comes from byte sized index implementation. | ||
| 247 | * Page size is normally 2^12 bytes and, in this case, if we want to use | ||
| 248 | * byte sized index which can represent 2^8 entries, the size of the object | ||
| 249 | * should be equal or greater to 2^12 / 2^8 = 2^4 = 16. | ||
| 250 | * If minimum size of kmalloc is less than 16, we use it as minimum object | ||
| 251 | * size and give up to use byte sized index. | ||
| 252 | */ | ||
| 253 | #define SLAB_OBJ_MIN_SIZE (KMALLOC_MIN_SIZE < 16 ? \ | ||
| 254 | (KMALLOC_MIN_SIZE) : 16) | ||
| 255 | |||
| 256 | #ifndef CONFIG_SLOB | 256 | #ifndef CONFIG_SLOB |
| 257 | extern struct kmem_cache *kmalloc_caches[KMALLOC_SHIFT_HIGH + 1]; | 257 | extern struct kmem_cache *kmalloc_caches[KMALLOC_SHIFT_HIGH + 1]; |
| 258 | #ifdef CONFIG_ZONE_DMA | 258 | #ifdef CONFIG_ZONE_DMA |
