mm/slab_common: support the slub_debug boot option on specific object size

The slub_debug=PU,kmalloc-xx cannot work because in the
create_kmalloc_caches() the s->name is created after the
create_kmalloc_cache() is called.  The name is NULL in the
create_kmalloc_cache() so the kmem_cache_flags() would not set the
slub_debug flags to the s->flags.  The fix here set up a kmalloc_names
string array for the initialization purpose and delete the dynamic name
creation of kmalloc_caches.

[akpm@linux-foundation.org: s/kmalloc_names/kmalloc_info/, tweak comment text]
Signed-off-by: Gavin Guo <gavin.guo@canonical.com>
Acked-by: Christoph Lameter <cl@linux.com>
Cc: Pekka Enberg <penberg@kernel.org>
Cc: David Rientjes <rientjes@google.com>
Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
Gavin Guo
2015-06-24 16:55:54 -07:00
committed by Linus Torvalds
parent 3693a84d3b
commit 4066c33d03
2 changed files with 61 additions and 23 deletions

View File

@@ -153,8 +153,30 @@ size_t ksize(const void *);
#define ARCH_KMALLOC_MINALIGN ARCH_DMA_MINALIGN
#define KMALLOC_MIN_SIZE ARCH_DMA_MINALIGN
#define KMALLOC_SHIFT_LOW ilog2(ARCH_DMA_MINALIGN)
/*
* The KMALLOC_LOOP_LOW is the definition for the for loop index start number
* to create the kmalloc_caches object in create_kmalloc_caches(). The first
* and the second are 96 and 192. You can see that in the kmalloc_index(), if
* the KMALLOC_MIN_SIZE <= 32, then return 1 (96). If KMALLOC_MIN_SIZE <= 64,
* then return 2 (192). If the KMALLOC_MIN_SIZE is bigger than 64, we don't
* need to initialize 96 and 192. Go directly to start the KMALLOC_SHIFT_LOW.
*/
#if KMALLOC_MIN_SIZE <= 32
#define KMALLOC_LOOP_LOW 1
#elif KMALLOC_MIN_SIZE <= 64
#define KMALLOC_LOOP_LOW 2
#else
#define KMALLOC_LOOP_LOW KMALLOC_SHIFT_LOW
#endif
#else
#define ARCH_KMALLOC_MINALIGN __alignof__(unsigned long long)
/*
* The KMALLOC_MIN_SIZE of slub/slab/slob is 2^3/2^5/2^3. So, even slab is used.
* The KMALLOC_MIN_SIZE <= 32. The kmalloc-96 and kmalloc-192 should also be
* initialized.
*/
#define KMALLOC_LOOP_LOW 1
#endif
/*