aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux
diff options
context:
space:
mode:
authorJoonsoo Kim <iamjoonsoo.kim@lge.com>2014-03-12 04:06:19 -0400
committerPekka Enberg <penberg@kernel.org>2014-04-01 06:38:04 -0400
commit24f870d8f0adcd38639f2f66e37aa7591a3fc408 (patch)
treebe36bd3e209e78faff043fda65337749b3bee7dc /include/linux
parent80c3a9981a544b6e96debfbcca5190b727ecd09e (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>
Diffstat (limited to 'include/linux')
-rw-r--r--include/linux/slab.h22
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
257extern struct kmem_cache *kmalloc_caches[KMALLOC_SHIFT_HIGH + 1]; 257extern struct kmem_cache *kmalloc_caches[KMALLOC_SHIFT_HIGH + 1];
258#ifdef CONFIG_ZONE_DMA 258#ifdef CONFIG_ZONE_DMA