1039363f3SChristoph Lameter /* 2039363f3SChristoph Lameter * Slab allocator functions that are independent of the allocator strategy 3039363f3SChristoph Lameter * 4039363f3SChristoph Lameter * (C) 2012 Christoph Lameter <cl@linux.com> 5039363f3SChristoph Lameter */ 6039363f3SChristoph Lameter #include <linux/slab.h> 7039363f3SChristoph Lameter 8039363f3SChristoph Lameter #include <linux/mm.h> 9039363f3SChristoph Lameter #include <linux/poison.h> 10039363f3SChristoph Lameter #include <linux/interrupt.h> 11039363f3SChristoph Lameter #include <linux/memory.h> 12039363f3SChristoph Lameter #include <linux/compiler.h> 13039363f3SChristoph Lameter #include <linux/module.h> 1420cea968SChristoph Lameter #include <linux/cpu.h> 1520cea968SChristoph Lameter #include <linux/uaccess.h> 16b7454ad3SGlauber Costa #include <linux/seq_file.h> 17b7454ad3SGlauber Costa #include <linux/proc_fs.h> 18039363f3SChristoph Lameter #include <asm/cacheflush.h> 19039363f3SChristoph Lameter #include <asm/tlbflush.h> 20039363f3SChristoph Lameter #include <asm/page.h> 212633d7a0SGlauber Costa #include <linux/memcontrol.h> 22039363f3SChristoph Lameter 2397d06609SChristoph Lameter #include "slab.h" 2497d06609SChristoph Lameter 2597d06609SChristoph Lameter enum slab_state slab_state; 2618004c5dSChristoph Lameter LIST_HEAD(slab_caches); 2718004c5dSChristoph Lameter DEFINE_MUTEX(slab_mutex); 289b030cb8SChristoph Lameter struct kmem_cache *kmem_cache; 2997d06609SChristoph Lameter 3077be4b13SShuah Khan #ifdef CONFIG_DEBUG_VM 312633d7a0SGlauber Costa static int kmem_cache_sanity_check(struct mem_cgroup *memcg, const char *name, 322633d7a0SGlauber Costa size_t size) 3377be4b13SShuah Khan { 3477be4b13SShuah Khan struct kmem_cache *s = NULL; 3577be4b13SShuah Khan 3677be4b13SShuah Khan if (!name || in_interrupt() || size < sizeof(void *) || 3777be4b13SShuah Khan size > KMALLOC_MAX_SIZE) { 3877be4b13SShuah Khan pr_err("kmem_cache_create(%s) integrity check failed\n", name); 3977be4b13SShuah Khan return -EINVAL; 4077be4b13SShuah Khan } 4177be4b13SShuah Khan 4277be4b13SShuah Khan list_for_each_entry(s, &slab_caches, list) { 4377be4b13SShuah Khan char tmp; 4477be4b13SShuah Khan int res; 4577be4b13SShuah Khan 4677be4b13SShuah Khan /* 4777be4b13SShuah Khan * This happens when the module gets unloaded and doesn't 4877be4b13SShuah Khan * destroy its slab cache and no-one else reuses the vmalloc 4977be4b13SShuah Khan * area of the module. Print a warning. 5077be4b13SShuah Khan */ 5177be4b13SShuah Khan res = probe_kernel_address(s->name, tmp); 5277be4b13SShuah Khan if (res) { 5377be4b13SShuah Khan pr_err("Slab cache with size %d has lost its name\n", 5477be4b13SShuah Khan s->object_size); 5577be4b13SShuah Khan continue; 5677be4b13SShuah Khan } 5777be4b13SShuah Khan 582633d7a0SGlauber Costa /* 592633d7a0SGlauber Costa * For simplicity, we won't check this in the list of memcg 602633d7a0SGlauber Costa * caches. We have control over memcg naming, and if there 612633d7a0SGlauber Costa * aren't duplicates in the global list, there won't be any 622633d7a0SGlauber Costa * duplicates in the memcg lists as well. 632633d7a0SGlauber Costa */ 642633d7a0SGlauber Costa if (!memcg && !strcmp(s->name, name)) { 6577be4b13SShuah Khan pr_err("%s (%s): Cache name already exists.\n", 6677be4b13SShuah Khan __func__, name); 6777be4b13SShuah Khan dump_stack(); 6877be4b13SShuah Khan s = NULL; 6977be4b13SShuah Khan return -EINVAL; 7077be4b13SShuah Khan } 7177be4b13SShuah Khan } 7277be4b13SShuah Khan 7377be4b13SShuah Khan WARN_ON(strchr(name, ' ')); /* It confuses parsers */ 7477be4b13SShuah Khan return 0; 7577be4b13SShuah Khan } 7677be4b13SShuah Khan #else 772633d7a0SGlauber Costa static inline int kmem_cache_sanity_check(struct mem_cgroup *memcg, 782633d7a0SGlauber Costa const char *name, size_t size) 7977be4b13SShuah Khan { 8077be4b13SShuah Khan return 0; 8177be4b13SShuah Khan } 8277be4b13SShuah Khan #endif 8377be4b13SShuah Khan 8455007d84SGlauber Costa #ifdef CONFIG_MEMCG_KMEM 8555007d84SGlauber Costa int memcg_update_all_caches(int num_memcgs) 8655007d84SGlauber Costa { 8755007d84SGlauber Costa struct kmem_cache *s; 8855007d84SGlauber Costa int ret = 0; 8955007d84SGlauber Costa mutex_lock(&slab_mutex); 9055007d84SGlauber Costa 9155007d84SGlauber Costa list_for_each_entry(s, &slab_caches, list) { 9255007d84SGlauber Costa if (!is_root_cache(s)) 9355007d84SGlauber Costa continue; 9455007d84SGlauber Costa 9555007d84SGlauber Costa ret = memcg_update_cache_size(s, num_memcgs); 9655007d84SGlauber Costa /* 9755007d84SGlauber Costa * See comment in memcontrol.c, memcg_update_cache_size: 9855007d84SGlauber Costa * Instead of freeing the memory, we'll just leave the caches 9955007d84SGlauber Costa * up to this point in an updated state. 10055007d84SGlauber Costa */ 10155007d84SGlauber Costa if (ret) 10255007d84SGlauber Costa goto out; 10355007d84SGlauber Costa } 10455007d84SGlauber Costa 10555007d84SGlauber Costa memcg_update_array_size(num_memcgs); 10655007d84SGlauber Costa out: 10755007d84SGlauber Costa mutex_unlock(&slab_mutex); 10855007d84SGlauber Costa return ret; 10955007d84SGlauber Costa } 11055007d84SGlauber Costa #endif 11155007d84SGlauber Costa 112039363f3SChristoph Lameter /* 11345906855SChristoph Lameter * Figure out what the alignment of the objects will be given a set of 11445906855SChristoph Lameter * flags, a user specified alignment and the size of the objects. 11545906855SChristoph Lameter */ 11645906855SChristoph Lameter unsigned long calculate_alignment(unsigned long flags, 11745906855SChristoph Lameter unsigned long align, unsigned long size) 11845906855SChristoph Lameter { 11945906855SChristoph Lameter /* 12045906855SChristoph Lameter * If the user wants hardware cache aligned objects then follow that 12145906855SChristoph Lameter * suggestion if the object is sufficiently large. 12245906855SChristoph Lameter * 12345906855SChristoph Lameter * The hardware cache alignment cannot override the specified 12445906855SChristoph Lameter * alignment though. If that is greater then use it. 12545906855SChristoph Lameter */ 12645906855SChristoph Lameter if (flags & SLAB_HWCACHE_ALIGN) { 12745906855SChristoph Lameter unsigned long ralign = cache_line_size(); 12845906855SChristoph Lameter while (size <= ralign / 2) 12945906855SChristoph Lameter ralign /= 2; 13045906855SChristoph Lameter align = max(align, ralign); 13145906855SChristoph Lameter } 13245906855SChristoph Lameter 13345906855SChristoph Lameter if (align < ARCH_SLAB_MINALIGN) 13445906855SChristoph Lameter align = ARCH_SLAB_MINALIGN; 13545906855SChristoph Lameter 13645906855SChristoph Lameter return ALIGN(align, sizeof(void *)); 13745906855SChristoph Lameter } 13845906855SChristoph Lameter 13945906855SChristoph Lameter 14045906855SChristoph Lameter /* 141039363f3SChristoph Lameter * kmem_cache_create - Create a cache. 142039363f3SChristoph Lameter * @name: A string which is used in /proc/slabinfo to identify this cache. 143039363f3SChristoph Lameter * @size: The size of objects to be created in this cache. 144039363f3SChristoph Lameter * @align: The required alignment for the objects. 145039363f3SChristoph Lameter * @flags: SLAB flags 146039363f3SChristoph Lameter * @ctor: A constructor for the objects. 147039363f3SChristoph Lameter * 148039363f3SChristoph Lameter * Returns a ptr to the cache on success, NULL on failure. 149039363f3SChristoph Lameter * Cannot be called within a interrupt, but can be interrupted. 150039363f3SChristoph Lameter * The @ctor is run when new pages are allocated by the cache. 151039363f3SChristoph Lameter * 152039363f3SChristoph Lameter * The flags are 153039363f3SChristoph Lameter * 154039363f3SChristoph Lameter * %SLAB_POISON - Poison the slab with a known test pattern (a5a5a5a5) 155039363f3SChristoph Lameter * to catch references to uninitialised memory. 156039363f3SChristoph Lameter * 157039363f3SChristoph Lameter * %SLAB_RED_ZONE - Insert `Red' zones around the allocated memory to check 158039363f3SChristoph Lameter * for buffer overruns. 159039363f3SChristoph Lameter * 160039363f3SChristoph Lameter * %SLAB_HWCACHE_ALIGN - Align the objects in this cache to a hardware 161039363f3SChristoph Lameter * cacheline. This can be beneficial if you're counting cycles as closely 162039363f3SChristoph Lameter * as davem. 163039363f3SChristoph Lameter */ 164039363f3SChristoph Lameter 1652633d7a0SGlauber Costa struct kmem_cache * 1662633d7a0SGlauber Costa kmem_cache_create_memcg(struct mem_cgroup *memcg, const char *name, size_t size, 167943a451aSGlauber Costa size_t align, unsigned long flags, void (*ctor)(void *), 168943a451aSGlauber Costa struct kmem_cache *parent_cache) 169039363f3SChristoph Lameter { 170039363f3SChristoph Lameter struct kmem_cache *s = NULL; 171686d550dSChristoph Lameter int err = 0; 172039363f3SChristoph Lameter 173b920536aSPekka Enberg get_online_cpus(); 174b920536aSPekka Enberg mutex_lock(&slab_mutex); 175686d550dSChristoph Lameter 1762633d7a0SGlauber Costa if (!kmem_cache_sanity_check(memcg, name, size) == 0) 177686d550dSChristoph Lameter goto out_locked; 178686d550dSChristoph Lameter 179d8843922SGlauber Costa /* 180d8843922SGlauber Costa * Some allocators will constraint the set of valid flags to a subset 181d8843922SGlauber Costa * of all flags. We expect them to define CACHE_CREATE_MASK in this 182d8843922SGlauber Costa * case, and we'll just provide them with a sanitized version of the 183d8843922SGlauber Costa * passed flags. 184d8843922SGlauber Costa */ 185d8843922SGlauber Costa flags &= CACHE_CREATE_MASK; 186686d550dSChristoph Lameter 1872633d7a0SGlauber Costa s = __kmem_cache_alias(memcg, name, size, align, flags, ctor); 188cbb79694SChristoph Lameter if (s) 189cbb79694SChristoph Lameter goto out_locked; 190cbb79694SChristoph Lameter 191278b1bb1SChristoph Lameter s = kmem_cache_zalloc(kmem_cache, GFP_KERNEL); 192db265ecaSChristoph Lameter if (s) { 1938a13a4ccSChristoph Lameter s->object_size = s->size = size; 19445906855SChristoph Lameter s->align = calculate_alignment(flags, align, size); 1958a13a4ccSChristoph Lameter s->ctor = ctor; 1962633d7a0SGlauber Costa 197943a451aSGlauber Costa if (memcg_register_cache(memcg, s, parent_cache)) { 1982633d7a0SGlauber Costa kmem_cache_free(kmem_cache, s); 1992633d7a0SGlauber Costa err = -ENOMEM; 2002633d7a0SGlauber Costa goto out_locked; 2012633d7a0SGlauber Costa } 2022633d7a0SGlauber Costa 2038a13a4ccSChristoph Lameter s->name = kstrdup(name, GFP_KERNEL); 2048a13a4ccSChristoph Lameter if (!s->name) { 2058a13a4ccSChristoph Lameter kmem_cache_free(kmem_cache, s); 2068a13a4ccSChristoph Lameter err = -ENOMEM; 2078a13a4ccSChristoph Lameter goto out_locked; 2088a13a4ccSChristoph Lameter } 2098a13a4ccSChristoph Lameter 2108a13a4ccSChristoph Lameter err = __kmem_cache_create(s, flags); 211cce89f4fSChristoph Lameter if (!err) { 212cce89f4fSChristoph Lameter s->refcount = 1; 2137c9adf5aSChristoph Lameter list_add(&s->list, &slab_caches); 2142633d7a0SGlauber Costa memcg_cache_list_add(memcg, s); 215cce89f4fSChristoph Lameter } else { 2168a13a4ccSChristoph Lameter kfree(s->name); 217278b1bb1SChristoph Lameter kmem_cache_free(kmem_cache, s); 218278b1bb1SChristoph Lameter } 2198a13a4ccSChristoph Lameter } else 220278b1bb1SChristoph Lameter err = -ENOMEM; 221db265ecaSChristoph Lameter 222686d550dSChristoph Lameter out_locked: 22320cea968SChristoph Lameter mutex_unlock(&slab_mutex); 22420cea968SChristoph Lameter put_online_cpus(); 22520cea968SChristoph Lameter 226686d550dSChristoph Lameter if (err) { 227686d550dSChristoph Lameter 228686d550dSChristoph Lameter if (flags & SLAB_PANIC) 229686d550dSChristoph Lameter panic("kmem_cache_create: Failed to create slab '%s'. Error %d\n", 230686d550dSChristoph Lameter name, err); 231686d550dSChristoph Lameter else { 232686d550dSChristoph Lameter printk(KERN_WARNING "kmem_cache_create(%s) failed with error %d", 233686d550dSChristoph Lameter name, err); 234686d550dSChristoph Lameter dump_stack(); 235686d550dSChristoph Lameter } 236686d550dSChristoph Lameter 237686d550dSChristoph Lameter return NULL; 238686d550dSChristoph Lameter } 239039363f3SChristoph Lameter 240039363f3SChristoph Lameter return s; 241039363f3SChristoph Lameter } 2422633d7a0SGlauber Costa 2432633d7a0SGlauber Costa struct kmem_cache * 2442633d7a0SGlauber Costa kmem_cache_create(const char *name, size_t size, size_t align, 2452633d7a0SGlauber Costa unsigned long flags, void (*ctor)(void *)) 2462633d7a0SGlauber Costa { 247943a451aSGlauber Costa return kmem_cache_create_memcg(NULL, name, size, align, flags, ctor, NULL); 2482633d7a0SGlauber Costa } 249039363f3SChristoph Lameter EXPORT_SYMBOL(kmem_cache_create); 25097d06609SChristoph Lameter 251945cf2b6SChristoph Lameter void kmem_cache_destroy(struct kmem_cache *s) 252945cf2b6SChristoph Lameter { 2537cf27982SGlauber Costa /* Destroy all the children caches if we aren't a memcg cache */ 2547cf27982SGlauber Costa kmem_cache_destroy_memcg_children(s); 2557cf27982SGlauber Costa 256945cf2b6SChristoph Lameter get_online_cpus(); 257945cf2b6SChristoph Lameter mutex_lock(&slab_mutex); 258945cf2b6SChristoph Lameter s->refcount--; 259945cf2b6SChristoph Lameter if (!s->refcount) { 260945cf2b6SChristoph Lameter list_del(&s->list); 261945cf2b6SChristoph Lameter 262945cf2b6SChristoph Lameter if (!__kmem_cache_shutdown(s)) { 263210ed9deSJiri Kosina mutex_unlock(&slab_mutex); 264945cf2b6SChristoph Lameter if (s->flags & SLAB_DESTROY_BY_RCU) 265945cf2b6SChristoph Lameter rcu_barrier(); 266945cf2b6SChristoph Lameter 2672633d7a0SGlauber Costa memcg_release_cache(s); 268db265ecaSChristoph Lameter kfree(s->name); 2698f4c765cSChristoph Lameter kmem_cache_free(kmem_cache, s); 270945cf2b6SChristoph Lameter } else { 271945cf2b6SChristoph Lameter list_add(&s->list, &slab_caches); 272210ed9deSJiri Kosina mutex_unlock(&slab_mutex); 273945cf2b6SChristoph Lameter printk(KERN_ERR "kmem_cache_destroy %s: Slab cache still has objects\n", 274945cf2b6SChristoph Lameter s->name); 275945cf2b6SChristoph Lameter dump_stack(); 276945cf2b6SChristoph Lameter } 277210ed9deSJiri Kosina } else { 278945cf2b6SChristoph Lameter mutex_unlock(&slab_mutex); 279210ed9deSJiri Kosina } 280945cf2b6SChristoph Lameter put_online_cpus(); 281945cf2b6SChristoph Lameter } 282945cf2b6SChristoph Lameter EXPORT_SYMBOL(kmem_cache_destroy); 283945cf2b6SChristoph Lameter 28497d06609SChristoph Lameter int slab_is_available(void) 28597d06609SChristoph Lameter { 28697d06609SChristoph Lameter return slab_state >= UP; 28797d06609SChristoph Lameter } 288b7454ad3SGlauber Costa 28945530c44SChristoph Lameter #ifndef CONFIG_SLOB 29045530c44SChristoph Lameter /* Create a cache during boot when no slab services are available yet */ 29145530c44SChristoph Lameter void __init create_boot_cache(struct kmem_cache *s, const char *name, size_t size, 29245530c44SChristoph Lameter unsigned long flags) 29345530c44SChristoph Lameter { 29445530c44SChristoph Lameter int err; 29545530c44SChristoph Lameter 29645530c44SChristoph Lameter s->name = name; 29745530c44SChristoph Lameter s->size = s->object_size = size; 29845906855SChristoph Lameter s->align = calculate_alignment(flags, ARCH_KMALLOC_MINALIGN, size); 29945530c44SChristoph Lameter err = __kmem_cache_create(s, flags); 30045530c44SChristoph Lameter 30145530c44SChristoph Lameter if (err) 30231ba7346SChristoph Lameter panic("Creation of kmalloc slab %s size=%zu failed. Reason %d\n", 30345530c44SChristoph Lameter name, size, err); 30445530c44SChristoph Lameter 30545530c44SChristoph Lameter s->refcount = -1; /* Exempt from merging for now */ 30645530c44SChristoph Lameter } 30745530c44SChristoph Lameter 30845530c44SChristoph Lameter struct kmem_cache *__init create_kmalloc_cache(const char *name, size_t size, 30945530c44SChristoph Lameter unsigned long flags) 31045530c44SChristoph Lameter { 31145530c44SChristoph Lameter struct kmem_cache *s = kmem_cache_zalloc(kmem_cache, GFP_NOWAIT); 31245530c44SChristoph Lameter 31345530c44SChristoph Lameter if (!s) 31445530c44SChristoph Lameter panic("Out of memory when creating slab %s\n", name); 31545530c44SChristoph Lameter 31645530c44SChristoph Lameter create_boot_cache(s, name, size, flags); 31745530c44SChristoph Lameter list_add(&s->list, &slab_caches); 31845530c44SChristoph Lameter s->refcount = 1; 31945530c44SChristoph Lameter return s; 32045530c44SChristoph Lameter } 32145530c44SChristoph Lameter 3229425c58eSChristoph Lameter struct kmem_cache *kmalloc_caches[KMALLOC_SHIFT_HIGH + 1]; 3239425c58eSChristoph Lameter EXPORT_SYMBOL(kmalloc_caches); 3249425c58eSChristoph Lameter 3259425c58eSChristoph Lameter #ifdef CONFIG_ZONE_DMA 3269425c58eSChristoph Lameter struct kmem_cache *kmalloc_dma_caches[KMALLOC_SHIFT_HIGH + 1]; 3279425c58eSChristoph Lameter EXPORT_SYMBOL(kmalloc_dma_caches); 3289425c58eSChristoph Lameter #endif 3299425c58eSChristoph Lameter 330f97d5f63SChristoph Lameter /* 3312c59dd65SChristoph Lameter * Conversion table for small slabs sizes / 8 to the index in the 3322c59dd65SChristoph Lameter * kmalloc array. This is necessary for slabs < 192 since we have non power 3332c59dd65SChristoph Lameter * of two cache sizes there. The size of larger slabs can be determined using 3342c59dd65SChristoph Lameter * fls. 3352c59dd65SChristoph Lameter */ 3362c59dd65SChristoph Lameter static s8 size_index[24] = { 3372c59dd65SChristoph Lameter 3, /* 8 */ 3382c59dd65SChristoph Lameter 4, /* 16 */ 3392c59dd65SChristoph Lameter 5, /* 24 */ 3402c59dd65SChristoph Lameter 5, /* 32 */ 3412c59dd65SChristoph Lameter 6, /* 40 */ 3422c59dd65SChristoph Lameter 6, /* 48 */ 3432c59dd65SChristoph Lameter 6, /* 56 */ 3442c59dd65SChristoph Lameter 6, /* 64 */ 3452c59dd65SChristoph Lameter 1, /* 72 */ 3462c59dd65SChristoph Lameter 1, /* 80 */ 3472c59dd65SChristoph Lameter 1, /* 88 */ 3482c59dd65SChristoph Lameter 1, /* 96 */ 3492c59dd65SChristoph Lameter 7, /* 104 */ 3502c59dd65SChristoph Lameter 7, /* 112 */ 3512c59dd65SChristoph Lameter 7, /* 120 */ 3522c59dd65SChristoph Lameter 7, /* 128 */ 3532c59dd65SChristoph Lameter 2, /* 136 */ 3542c59dd65SChristoph Lameter 2, /* 144 */ 3552c59dd65SChristoph Lameter 2, /* 152 */ 3562c59dd65SChristoph Lameter 2, /* 160 */ 3572c59dd65SChristoph Lameter 2, /* 168 */ 3582c59dd65SChristoph Lameter 2, /* 176 */ 3592c59dd65SChristoph Lameter 2, /* 184 */ 3602c59dd65SChristoph Lameter 2 /* 192 */ 3612c59dd65SChristoph Lameter }; 3622c59dd65SChristoph Lameter 3632c59dd65SChristoph Lameter static inline int size_index_elem(size_t bytes) 3642c59dd65SChristoph Lameter { 3652c59dd65SChristoph Lameter return (bytes - 1) / 8; 3662c59dd65SChristoph Lameter } 3672c59dd65SChristoph Lameter 3682c59dd65SChristoph Lameter /* 3692c59dd65SChristoph Lameter * Find the kmem_cache structure that serves a given size of 3702c59dd65SChristoph Lameter * allocation 3712c59dd65SChristoph Lameter */ 3722c59dd65SChristoph Lameter struct kmem_cache *kmalloc_slab(size_t size, gfp_t flags) 3732c59dd65SChristoph Lameter { 3742c59dd65SChristoph Lameter int index; 3752c59dd65SChristoph Lameter 3766286ae97SChristoph Lameter if (WARN_ON_ONCE(size > KMALLOC_MAX_SIZE)) 3776286ae97SChristoph Lameter return NULL; 3786286ae97SChristoph Lameter 3792c59dd65SChristoph Lameter if (size <= 192) { 3802c59dd65SChristoph Lameter if (!size) 3812c59dd65SChristoph Lameter return ZERO_SIZE_PTR; 3822c59dd65SChristoph Lameter 3832c59dd65SChristoph Lameter index = size_index[size_index_elem(size)]; 3842c59dd65SChristoph Lameter } else 3852c59dd65SChristoph Lameter index = fls(size - 1); 3862c59dd65SChristoph Lameter 3872c59dd65SChristoph Lameter #ifdef CONFIG_ZONE_DMA 388b1e05416SJoonsoo Kim if (unlikely((flags & GFP_DMA))) 3892c59dd65SChristoph Lameter return kmalloc_dma_caches[index]; 3902c59dd65SChristoph Lameter 3912c59dd65SChristoph Lameter #endif 3922c59dd65SChristoph Lameter return kmalloc_caches[index]; 3932c59dd65SChristoph Lameter } 3942c59dd65SChristoph Lameter 3952c59dd65SChristoph Lameter /* 396f97d5f63SChristoph Lameter * Create the kmalloc array. Some of the regular kmalloc arrays 397f97d5f63SChristoph Lameter * may already have been created because they were needed to 398f97d5f63SChristoph Lameter * enable allocations for slab creation. 399f97d5f63SChristoph Lameter */ 400f97d5f63SChristoph Lameter void __init create_kmalloc_caches(unsigned long flags) 401f97d5f63SChristoph Lameter { 402f97d5f63SChristoph Lameter int i; 403f97d5f63SChristoph Lameter 4042c59dd65SChristoph Lameter /* 4052c59dd65SChristoph Lameter * Patch up the size_index table if we have strange large alignment 4062c59dd65SChristoph Lameter * requirements for the kmalloc array. This is only the case for 4072c59dd65SChristoph Lameter * MIPS it seems. The standard arches will not generate any code here. 4082c59dd65SChristoph Lameter * 4092c59dd65SChristoph Lameter * Largest permitted alignment is 256 bytes due to the way we 4102c59dd65SChristoph Lameter * handle the index determination for the smaller caches. 4112c59dd65SChristoph Lameter * 4122c59dd65SChristoph Lameter * Make sure that nothing crazy happens if someone starts tinkering 4132c59dd65SChristoph Lameter * around with ARCH_KMALLOC_MINALIGN 4142c59dd65SChristoph Lameter */ 4152c59dd65SChristoph Lameter BUILD_BUG_ON(KMALLOC_MIN_SIZE > 256 || 4162c59dd65SChristoph Lameter (KMALLOC_MIN_SIZE & (KMALLOC_MIN_SIZE - 1))); 4172c59dd65SChristoph Lameter 4182c59dd65SChristoph Lameter for (i = 8; i < KMALLOC_MIN_SIZE; i += 8) { 4192c59dd65SChristoph Lameter int elem = size_index_elem(i); 4202c59dd65SChristoph Lameter 4212c59dd65SChristoph Lameter if (elem >= ARRAY_SIZE(size_index)) 4222c59dd65SChristoph Lameter break; 4232c59dd65SChristoph Lameter size_index[elem] = KMALLOC_SHIFT_LOW; 4242c59dd65SChristoph Lameter } 4252c59dd65SChristoph Lameter 4262c59dd65SChristoph Lameter if (KMALLOC_MIN_SIZE >= 64) { 4272c59dd65SChristoph Lameter /* 4282c59dd65SChristoph Lameter * The 96 byte size cache is not used if the alignment 4292c59dd65SChristoph Lameter * is 64 byte. 4302c59dd65SChristoph Lameter */ 4312c59dd65SChristoph Lameter for (i = 64 + 8; i <= 96; i += 8) 4322c59dd65SChristoph Lameter size_index[size_index_elem(i)] = 7; 4332c59dd65SChristoph Lameter 4342c59dd65SChristoph Lameter } 4352c59dd65SChristoph Lameter 4362c59dd65SChristoph Lameter if (KMALLOC_MIN_SIZE >= 128) { 4372c59dd65SChristoph Lameter /* 4382c59dd65SChristoph Lameter * The 192 byte sized cache is not used if the alignment 4392c59dd65SChristoph Lameter * is 128 byte. Redirect kmalloc to use the 256 byte cache 4402c59dd65SChristoph Lameter * instead. 4412c59dd65SChristoph Lameter */ 4422c59dd65SChristoph Lameter for (i = 128 + 8; i <= 192; i += 8) 4432c59dd65SChristoph Lameter size_index[size_index_elem(i)] = 8; 4442c59dd65SChristoph Lameter } 4458a965b3bSChristoph Lameter for (i = KMALLOC_SHIFT_LOW; i <= KMALLOC_SHIFT_HIGH; i++) { 4468a965b3bSChristoph Lameter if (!kmalloc_caches[i]) { 447f97d5f63SChristoph Lameter kmalloc_caches[i] = create_kmalloc_cache(NULL, 448f97d5f63SChristoph Lameter 1 << i, flags); 449f97d5f63SChristoph Lameter 4508a965b3bSChristoph Lameter /* 4518a965b3bSChristoph Lameter * Caches that are not of the two-to-the-power-of size. 4528a965b3bSChristoph Lameter * These have to be created immediately after the 4538a965b3bSChristoph Lameter * earlier power of two caches 4548a965b3bSChristoph Lameter */ 4558a965b3bSChristoph Lameter if (KMALLOC_MIN_SIZE <= 32 && !kmalloc_caches[1] && i == 6) 4568a965b3bSChristoph Lameter kmalloc_caches[1] = create_kmalloc_cache(NULL, 96, flags); 4578a965b3bSChristoph Lameter 4588a965b3bSChristoph Lameter if (KMALLOC_MIN_SIZE <= 64 && !kmalloc_caches[2] && i == 7) 4598a965b3bSChristoph Lameter kmalloc_caches[2] = create_kmalloc_cache(NULL, 192, flags); 4608a965b3bSChristoph Lameter } 4618a965b3bSChristoph Lameter } 4628a965b3bSChristoph Lameter 463f97d5f63SChristoph Lameter /* Kmalloc array is now usable */ 464f97d5f63SChristoph Lameter slab_state = UP; 465f97d5f63SChristoph Lameter 466f97d5f63SChristoph Lameter for (i = 0; i <= KMALLOC_SHIFT_HIGH; i++) { 467f97d5f63SChristoph Lameter struct kmem_cache *s = kmalloc_caches[i]; 468f97d5f63SChristoph Lameter char *n; 469f97d5f63SChristoph Lameter 470f97d5f63SChristoph Lameter if (s) { 471f97d5f63SChristoph Lameter n = kasprintf(GFP_NOWAIT, "kmalloc-%d", kmalloc_size(i)); 472f97d5f63SChristoph Lameter 473f97d5f63SChristoph Lameter BUG_ON(!n); 474f97d5f63SChristoph Lameter s->name = n; 475f97d5f63SChristoph Lameter } 476f97d5f63SChristoph Lameter } 477f97d5f63SChristoph Lameter 478f97d5f63SChristoph Lameter #ifdef CONFIG_ZONE_DMA 479f97d5f63SChristoph Lameter for (i = 0; i <= KMALLOC_SHIFT_HIGH; i++) { 480f97d5f63SChristoph Lameter struct kmem_cache *s = kmalloc_caches[i]; 481f97d5f63SChristoph Lameter 482f97d5f63SChristoph Lameter if (s) { 483f97d5f63SChristoph Lameter int size = kmalloc_size(i); 484f97d5f63SChristoph Lameter char *n = kasprintf(GFP_NOWAIT, 485f97d5f63SChristoph Lameter "dma-kmalloc-%d", size); 486f97d5f63SChristoph Lameter 487f97d5f63SChristoph Lameter BUG_ON(!n); 488f97d5f63SChristoph Lameter kmalloc_dma_caches[i] = create_kmalloc_cache(n, 489f97d5f63SChristoph Lameter size, SLAB_CACHE_DMA | flags); 490f97d5f63SChristoph Lameter } 491f97d5f63SChristoph Lameter } 492f97d5f63SChristoph Lameter #endif 493f97d5f63SChristoph Lameter } 49445530c44SChristoph Lameter #endif /* !CONFIG_SLOB */ 49545530c44SChristoph Lameter 49645530c44SChristoph Lameter 497b7454ad3SGlauber Costa #ifdef CONFIG_SLABINFO 498e9b4db2bSWanpeng Li 499e9b4db2bSWanpeng Li #ifdef CONFIG_SLAB 500e9b4db2bSWanpeng Li #define SLABINFO_RIGHTS (S_IWUSR | S_IRUSR) 501e9b4db2bSWanpeng Li #else 502e9b4db2bSWanpeng Li #define SLABINFO_RIGHTS S_IRUSR 503e9b4db2bSWanpeng Li #endif 504e9b4db2bSWanpeng Li 505749c5415SGlauber Costa void print_slabinfo_header(struct seq_file *m) 506bcee6e2aSGlauber Costa { 507bcee6e2aSGlauber Costa /* 508bcee6e2aSGlauber Costa * Output format version, so at least we can change it 509bcee6e2aSGlauber Costa * without _too_ many complaints. 510bcee6e2aSGlauber Costa */ 511bcee6e2aSGlauber Costa #ifdef CONFIG_DEBUG_SLAB 512bcee6e2aSGlauber Costa seq_puts(m, "slabinfo - version: 2.1 (statistics)\n"); 513bcee6e2aSGlauber Costa #else 514bcee6e2aSGlauber Costa seq_puts(m, "slabinfo - version: 2.1\n"); 515bcee6e2aSGlauber Costa #endif 516bcee6e2aSGlauber Costa seq_puts(m, "# name <active_objs> <num_objs> <objsize> " 517bcee6e2aSGlauber Costa "<objperslab> <pagesperslab>"); 518bcee6e2aSGlauber Costa seq_puts(m, " : tunables <limit> <batchcount> <sharedfactor>"); 519bcee6e2aSGlauber Costa seq_puts(m, " : slabdata <active_slabs> <num_slabs> <sharedavail>"); 520bcee6e2aSGlauber Costa #ifdef CONFIG_DEBUG_SLAB 521bcee6e2aSGlauber Costa seq_puts(m, " : globalstat <listallocs> <maxobjs> <grown> <reaped> " 522bcee6e2aSGlauber Costa "<error> <maxfreeable> <nodeallocs> <remotefrees> <alienoverflow>"); 523bcee6e2aSGlauber Costa seq_puts(m, " : cpustat <allochit> <allocmiss> <freehit> <freemiss>"); 524bcee6e2aSGlauber Costa #endif 525bcee6e2aSGlauber Costa seq_putc(m, '\n'); 526bcee6e2aSGlauber Costa } 527bcee6e2aSGlauber Costa 528b7454ad3SGlauber Costa static void *s_start(struct seq_file *m, loff_t *pos) 529b7454ad3SGlauber Costa { 530b7454ad3SGlauber Costa loff_t n = *pos; 531b7454ad3SGlauber Costa 532b7454ad3SGlauber Costa mutex_lock(&slab_mutex); 533b7454ad3SGlauber Costa if (!n) 534b7454ad3SGlauber Costa print_slabinfo_header(m); 535b7454ad3SGlauber Costa 536b7454ad3SGlauber Costa return seq_list_start(&slab_caches, *pos); 537b7454ad3SGlauber Costa } 538b7454ad3SGlauber Costa 539*276a2439SWanpeng Li void *slab_next(struct seq_file *m, void *p, loff_t *pos) 540b7454ad3SGlauber Costa { 541b7454ad3SGlauber Costa return seq_list_next(p, &slab_caches, pos); 542b7454ad3SGlauber Costa } 543b7454ad3SGlauber Costa 544*276a2439SWanpeng Li void slab_stop(struct seq_file *m, void *p) 545b7454ad3SGlauber Costa { 546b7454ad3SGlauber Costa mutex_unlock(&slab_mutex); 547b7454ad3SGlauber Costa } 548b7454ad3SGlauber Costa 549749c5415SGlauber Costa static void 550749c5415SGlauber Costa memcg_accumulate_slabinfo(struct kmem_cache *s, struct slabinfo *info) 551b7454ad3SGlauber Costa { 552749c5415SGlauber Costa struct kmem_cache *c; 553749c5415SGlauber Costa struct slabinfo sinfo; 554749c5415SGlauber Costa int i; 555749c5415SGlauber Costa 556749c5415SGlauber Costa if (!is_root_cache(s)) 557749c5415SGlauber Costa return; 558749c5415SGlauber Costa 559749c5415SGlauber Costa for_each_memcg_cache_index(i) { 560749c5415SGlauber Costa c = cache_from_memcg(s, i); 561749c5415SGlauber Costa if (!c) 562749c5415SGlauber Costa continue; 563749c5415SGlauber Costa 564749c5415SGlauber Costa memset(&sinfo, 0, sizeof(sinfo)); 565749c5415SGlauber Costa get_slabinfo(c, &sinfo); 566749c5415SGlauber Costa 567749c5415SGlauber Costa info->active_slabs += sinfo.active_slabs; 568749c5415SGlauber Costa info->num_slabs += sinfo.num_slabs; 569749c5415SGlauber Costa info->shared_avail += sinfo.shared_avail; 570749c5415SGlauber Costa info->active_objs += sinfo.active_objs; 571749c5415SGlauber Costa info->num_objs += sinfo.num_objs; 572749c5415SGlauber Costa } 573749c5415SGlauber Costa } 574749c5415SGlauber Costa 575749c5415SGlauber Costa int cache_show(struct kmem_cache *s, struct seq_file *m) 576749c5415SGlauber Costa { 5770d7561c6SGlauber Costa struct slabinfo sinfo; 5780d7561c6SGlauber Costa 5790d7561c6SGlauber Costa memset(&sinfo, 0, sizeof(sinfo)); 5800d7561c6SGlauber Costa get_slabinfo(s, &sinfo); 5810d7561c6SGlauber Costa 582749c5415SGlauber Costa memcg_accumulate_slabinfo(s, &sinfo); 583749c5415SGlauber Costa 5840d7561c6SGlauber Costa seq_printf(m, "%-17s %6lu %6lu %6u %4u %4d", 585749c5415SGlauber Costa cache_name(s), sinfo.active_objs, sinfo.num_objs, s->size, 5860d7561c6SGlauber Costa sinfo.objects_per_slab, (1 << sinfo.cache_order)); 5870d7561c6SGlauber Costa 5880d7561c6SGlauber Costa seq_printf(m, " : tunables %4u %4u %4u", 5890d7561c6SGlauber Costa sinfo.limit, sinfo.batchcount, sinfo.shared); 5900d7561c6SGlauber Costa seq_printf(m, " : slabdata %6lu %6lu %6lu", 5910d7561c6SGlauber Costa sinfo.active_slabs, sinfo.num_slabs, sinfo.shared_avail); 5920d7561c6SGlauber Costa slabinfo_show_stats(m, s); 5930d7561c6SGlauber Costa seq_putc(m, '\n'); 5940d7561c6SGlauber Costa return 0; 595b7454ad3SGlauber Costa } 596b7454ad3SGlauber Costa 597749c5415SGlauber Costa static int s_show(struct seq_file *m, void *p) 598749c5415SGlauber Costa { 599749c5415SGlauber Costa struct kmem_cache *s = list_entry(p, struct kmem_cache, list); 600749c5415SGlauber Costa 601749c5415SGlauber Costa if (!is_root_cache(s)) 602749c5415SGlauber Costa return 0; 603749c5415SGlauber Costa return cache_show(s, m); 604749c5415SGlauber Costa } 605749c5415SGlauber Costa 606b7454ad3SGlauber Costa /* 607b7454ad3SGlauber Costa * slabinfo_op - iterator that generates /proc/slabinfo 608b7454ad3SGlauber Costa * 609b7454ad3SGlauber Costa * Output layout: 610b7454ad3SGlauber Costa * cache-name 611b7454ad3SGlauber Costa * num-active-objs 612b7454ad3SGlauber Costa * total-objs 613b7454ad3SGlauber Costa * object size 614b7454ad3SGlauber Costa * num-active-slabs 615b7454ad3SGlauber Costa * total-slabs 616b7454ad3SGlauber Costa * num-pages-per-slab 617b7454ad3SGlauber Costa * + further values on SMP and with statistics enabled 618b7454ad3SGlauber Costa */ 619b7454ad3SGlauber Costa static const struct seq_operations slabinfo_op = { 620b7454ad3SGlauber Costa .start = s_start, 621*276a2439SWanpeng Li .next = slab_next, 622*276a2439SWanpeng Li .stop = slab_stop, 623b7454ad3SGlauber Costa .show = s_show, 624b7454ad3SGlauber Costa }; 625b7454ad3SGlauber Costa 626b7454ad3SGlauber Costa static int slabinfo_open(struct inode *inode, struct file *file) 627b7454ad3SGlauber Costa { 628b7454ad3SGlauber Costa return seq_open(file, &slabinfo_op); 629b7454ad3SGlauber Costa } 630b7454ad3SGlauber Costa 631b7454ad3SGlauber Costa static const struct file_operations proc_slabinfo_operations = { 632b7454ad3SGlauber Costa .open = slabinfo_open, 633b7454ad3SGlauber Costa .read = seq_read, 634b7454ad3SGlauber Costa .write = slabinfo_write, 635b7454ad3SGlauber Costa .llseek = seq_lseek, 636b7454ad3SGlauber Costa .release = seq_release, 637b7454ad3SGlauber Costa }; 638b7454ad3SGlauber Costa 639b7454ad3SGlauber Costa static int __init slab_proc_init(void) 640b7454ad3SGlauber Costa { 641e9b4db2bSWanpeng Li proc_create("slabinfo", SLABINFO_RIGHTS, NULL, 642e9b4db2bSWanpeng Li &proc_slabinfo_operations); 643b7454ad3SGlauber Costa return 0; 644b7454ad3SGlauber Costa } 645b7454ad3SGlauber Costa module_init(slab_proc_init); 646b7454ad3SGlauber Costa #endif /* CONFIG_SLABINFO */ 647