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>
This commit is contained in:
parent
80c3a9981a
commit
24f870d8f0
1 changed files with 11 additions and 11 deletions
|
@ -201,17 +201,6 @@ struct kmem_cache {
|
||||||
#ifndef KMALLOC_SHIFT_LOW
|
#ifndef KMALLOC_SHIFT_LOW
|
||||||
#define KMALLOC_SHIFT_LOW 5
|
#define KMALLOC_SHIFT_LOW 5
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
|
||||||
* This restriction comes from byte sized index implementation.
|
|
||||||
* Page size is normally 2^12 bytes and, in this case, if we want to use
|
|
||||||
* byte sized index which can represent 2^8 entries, the size of the object
|
|
||||||
* should be equal or greater to 2^12 / 2^8 = 2^4 = 16.
|
|
||||||
* If minimum size of kmalloc is less than 16, we use it as minimum object
|
|
||||||
* size and give up to use byte sized index.
|
|
||||||
*/
|
|
||||||
#define SLAB_OBJ_MIN_SIZE (KMALLOC_SHIFT_LOW < 4 ? \
|
|
||||||
(1 << KMALLOC_SHIFT_LOW) : 16)
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_SLUB
|
#ifdef CONFIG_SLUB
|
||||||
|
@ -253,6 +242,17 @@ struct kmem_cache {
|
||||||
#define KMALLOC_MIN_SIZE (1 << KMALLOC_SHIFT_LOW)
|
#define KMALLOC_MIN_SIZE (1 << KMALLOC_SHIFT_LOW)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This restriction comes from byte sized index implementation.
|
||||||
|
* Page size is normally 2^12 bytes and, in this case, if we want to use
|
||||||
|
* byte sized index which can represent 2^8 entries, the size of the object
|
||||||
|
* should be equal or greater to 2^12 / 2^8 = 2^4 = 16.
|
||||||
|
* If minimum size of kmalloc is less than 16, we use it as minimum object
|
||||||
|
* size and give up to use byte sized index.
|
||||||
|
*/
|
||||||
|
#define SLAB_OBJ_MIN_SIZE (KMALLOC_MIN_SIZE < 16 ? \
|
||||||
|
(KMALLOC_MIN_SIZE) : 16)
|
||||||
|
|
||||||
#ifndef CONFIG_SLOB
|
#ifndef CONFIG_SLOB
|
||||||
extern struct kmem_cache *kmalloc_caches[KMALLOC_SHIFT_HIGH + 1];
|
extern struct kmem_cache *kmalloc_caches[KMALLOC_SHIFT_HIGH + 1];
|
||||||
#ifdef CONFIG_ZONE_DMA
|
#ifdef CONFIG_ZONE_DMA
|
||||||
|
|
Loading…
Add table
Reference in a new issue