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> 22f1b6eb6eSChristoph Lameter #include <trace/events/kmem.h> 23039363f3SChristoph Lameter 2497d06609SChristoph Lameter #include "slab.h" 2597d06609SChristoph Lameter 2697d06609SChristoph Lameter enum slab_state slab_state; 2718004c5dSChristoph Lameter LIST_HEAD(slab_caches); 2818004c5dSChristoph Lameter DEFINE_MUTEX(slab_mutex); 299b030cb8SChristoph Lameter struct kmem_cache *kmem_cache; 3097d06609SChristoph Lameter 3177be4b13SShuah Khan #ifdef CONFIG_DEBUG_VM 32794b1248SVladimir Davydov static int kmem_cache_sanity_check(const char *name, 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 583e374919SChristoph Lameter #if !defined(CONFIG_SLUB) || !defined(CONFIG_SLUB_DEBUG_ON) 59794b1248SVladimir Davydov if (!strcmp(s->name, name)) { 6077be4b13SShuah Khan pr_err("%s (%s): Cache name already exists.\n", 6177be4b13SShuah Khan __func__, name); 6277be4b13SShuah Khan dump_stack(); 6377be4b13SShuah Khan s = NULL; 6477be4b13SShuah Khan return -EINVAL; 6577be4b13SShuah Khan } 663e374919SChristoph Lameter #endif 6777be4b13SShuah Khan } 6877be4b13SShuah Khan 6977be4b13SShuah Khan WARN_ON(strchr(name, ' ')); /* It confuses parsers */ 7077be4b13SShuah Khan return 0; 7177be4b13SShuah Khan } 7277be4b13SShuah Khan #else 73794b1248SVladimir Davydov static inline int kmem_cache_sanity_check(const char *name, size_t size) 7477be4b13SShuah Khan { 7577be4b13SShuah Khan return 0; 7677be4b13SShuah Khan } 7777be4b13SShuah Khan #endif 7877be4b13SShuah Khan 7955007d84SGlauber Costa #ifdef CONFIG_MEMCG_KMEM 8055007d84SGlauber Costa int memcg_update_all_caches(int num_memcgs) 8155007d84SGlauber Costa { 8255007d84SGlauber Costa struct kmem_cache *s; 8355007d84SGlauber Costa int ret = 0; 8455007d84SGlauber Costa mutex_lock(&slab_mutex); 8555007d84SGlauber Costa 8655007d84SGlauber Costa list_for_each_entry(s, &slab_caches, list) { 8755007d84SGlauber Costa if (!is_root_cache(s)) 8855007d84SGlauber Costa continue; 8955007d84SGlauber Costa 9055007d84SGlauber Costa ret = memcg_update_cache_size(s, num_memcgs); 9155007d84SGlauber Costa /* 9255007d84SGlauber Costa * See comment in memcontrol.c, memcg_update_cache_size: 9355007d84SGlauber Costa * Instead of freeing the memory, we'll just leave the caches 9455007d84SGlauber Costa * up to this point in an updated state. 9555007d84SGlauber Costa */ 9655007d84SGlauber Costa if (ret) 9755007d84SGlauber Costa goto out; 9855007d84SGlauber Costa } 9955007d84SGlauber Costa 10055007d84SGlauber Costa memcg_update_array_size(num_memcgs); 10155007d84SGlauber Costa out: 10255007d84SGlauber Costa mutex_unlock(&slab_mutex); 10355007d84SGlauber Costa return ret; 10455007d84SGlauber Costa } 10555007d84SGlauber Costa #endif 10655007d84SGlauber Costa 107039363f3SChristoph Lameter /* 10845906855SChristoph Lameter * Figure out what the alignment of the objects will be given a set of 10945906855SChristoph Lameter * flags, a user specified alignment and the size of the objects. 11045906855SChristoph Lameter */ 11145906855SChristoph Lameter unsigned long calculate_alignment(unsigned long flags, 11245906855SChristoph Lameter unsigned long align, unsigned long size) 11345906855SChristoph Lameter { 11445906855SChristoph Lameter /* 11545906855SChristoph Lameter * If the user wants hardware cache aligned objects then follow that 11645906855SChristoph Lameter * suggestion if the object is sufficiently large. 11745906855SChristoph Lameter * 11845906855SChristoph Lameter * The hardware cache alignment cannot override the specified 11945906855SChristoph Lameter * alignment though. If that is greater then use it. 12045906855SChristoph Lameter */ 12145906855SChristoph Lameter if (flags & SLAB_HWCACHE_ALIGN) { 12245906855SChristoph Lameter unsigned long ralign = cache_line_size(); 12345906855SChristoph Lameter while (size <= ralign / 2) 12445906855SChristoph Lameter ralign /= 2; 12545906855SChristoph Lameter align = max(align, ralign); 12645906855SChristoph Lameter } 12745906855SChristoph Lameter 12845906855SChristoph Lameter if (align < ARCH_SLAB_MINALIGN) 12945906855SChristoph Lameter align = ARCH_SLAB_MINALIGN; 13045906855SChristoph Lameter 13145906855SChristoph Lameter return ALIGN(align, sizeof(void *)); 13245906855SChristoph Lameter } 13345906855SChristoph Lameter 134794b1248SVladimir Davydov static struct kmem_cache * 135794b1248SVladimir Davydov do_kmem_cache_create(char *name, size_t object_size, size_t size, size_t align, 136794b1248SVladimir Davydov unsigned long flags, void (*ctor)(void *), 137794b1248SVladimir Davydov struct mem_cgroup *memcg, struct kmem_cache *root_cache) 138794b1248SVladimir Davydov { 139794b1248SVladimir Davydov struct kmem_cache *s; 140794b1248SVladimir Davydov int err; 141794b1248SVladimir Davydov 142794b1248SVladimir Davydov err = -ENOMEM; 143794b1248SVladimir Davydov s = kmem_cache_zalloc(kmem_cache, GFP_KERNEL); 144794b1248SVladimir Davydov if (!s) 145794b1248SVladimir Davydov goto out; 146794b1248SVladimir Davydov 147794b1248SVladimir Davydov s->name = name; 148794b1248SVladimir Davydov s->object_size = object_size; 149794b1248SVladimir Davydov s->size = size; 150794b1248SVladimir Davydov s->align = align; 151794b1248SVladimir Davydov s->ctor = ctor; 152794b1248SVladimir Davydov 153794b1248SVladimir Davydov err = memcg_alloc_cache_params(memcg, s, root_cache); 154794b1248SVladimir Davydov if (err) 155794b1248SVladimir Davydov goto out_free_cache; 156794b1248SVladimir Davydov 157794b1248SVladimir Davydov err = __kmem_cache_create(s, flags); 158794b1248SVladimir Davydov if (err) 159794b1248SVladimir Davydov goto out_free_cache; 160794b1248SVladimir Davydov 161794b1248SVladimir Davydov s->refcount = 1; 162794b1248SVladimir Davydov list_add(&s->list, &slab_caches); 163794b1248SVladimir Davydov memcg_register_cache(s); 164794b1248SVladimir Davydov out: 165794b1248SVladimir Davydov if (err) 166794b1248SVladimir Davydov return ERR_PTR(err); 167794b1248SVladimir Davydov return s; 168794b1248SVladimir Davydov 169794b1248SVladimir Davydov out_free_cache: 170794b1248SVladimir Davydov memcg_free_cache_params(s); 171794b1248SVladimir Davydov kfree(s); 172794b1248SVladimir Davydov goto out; 173794b1248SVladimir Davydov } 17445906855SChristoph Lameter 17545906855SChristoph Lameter /* 176039363f3SChristoph Lameter * kmem_cache_create - Create a cache. 177039363f3SChristoph Lameter * @name: A string which is used in /proc/slabinfo to identify this cache. 178039363f3SChristoph Lameter * @size: The size of objects to be created in this cache. 179039363f3SChristoph Lameter * @align: The required alignment for the objects. 180039363f3SChristoph Lameter * @flags: SLAB flags 181039363f3SChristoph Lameter * @ctor: A constructor for the objects. 182039363f3SChristoph Lameter * 183039363f3SChristoph Lameter * Returns a ptr to the cache on success, NULL on failure. 184039363f3SChristoph Lameter * Cannot be called within a interrupt, but can be interrupted. 185039363f3SChristoph Lameter * The @ctor is run when new pages are allocated by the cache. 186039363f3SChristoph Lameter * 187039363f3SChristoph Lameter * The flags are 188039363f3SChristoph Lameter * 189039363f3SChristoph Lameter * %SLAB_POISON - Poison the slab with a known test pattern (a5a5a5a5) 190039363f3SChristoph Lameter * to catch references to uninitialised memory. 191039363f3SChristoph Lameter * 192039363f3SChristoph Lameter * %SLAB_RED_ZONE - Insert `Red' zones around the allocated memory to check 193039363f3SChristoph Lameter * for buffer overruns. 194039363f3SChristoph Lameter * 195039363f3SChristoph Lameter * %SLAB_HWCACHE_ALIGN - Align the objects in this cache to a hardware 196039363f3SChristoph Lameter * cacheline. This can be beneficial if you're counting cycles as closely 197039363f3SChristoph Lameter * as davem. 198039363f3SChristoph Lameter */ 1992633d7a0SGlauber Costa struct kmem_cache * 200794b1248SVladimir Davydov kmem_cache_create(const char *name, size_t size, size_t align, 201794b1248SVladimir Davydov unsigned long flags, void (*ctor)(void *)) 202039363f3SChristoph Lameter { 203794b1248SVladimir Davydov struct kmem_cache *s; 204794b1248SVladimir Davydov char *cache_name; 2053965fc36SVladimir Davydov int err; 206039363f3SChristoph Lameter 207b920536aSPekka Enberg get_online_cpus(); 208b920536aSPekka Enberg mutex_lock(&slab_mutex); 209686d550dSChristoph Lameter 210794b1248SVladimir Davydov err = kmem_cache_sanity_check(name, size); 2113965fc36SVladimir Davydov if (err) 2123965fc36SVladimir Davydov goto out_unlock; 213686d550dSChristoph Lameter 214d8843922SGlauber Costa /* 215d8843922SGlauber Costa * Some allocators will constraint the set of valid flags to a subset 216d8843922SGlauber Costa * of all flags. We expect them to define CACHE_CREATE_MASK in this 217d8843922SGlauber Costa * case, and we'll just provide them with a sanitized version of the 218d8843922SGlauber Costa * passed flags. 219d8843922SGlauber Costa */ 220d8843922SGlauber Costa flags &= CACHE_CREATE_MASK; 221686d550dSChristoph Lameter 222a44cb944SVladimir Davydov s = __kmem_cache_alias(name, size, align, flags, ctor); 223cbb79694SChristoph Lameter if (s) 2243965fc36SVladimir Davydov goto out_unlock; 225794b1248SVladimir Davydov 226794b1248SVladimir Davydov cache_name = kstrdup(name, GFP_KERNEL); 227794b1248SVladimir Davydov if (!cache_name) { 228794b1248SVladimir Davydov err = -ENOMEM; 229794b1248SVladimir Davydov goto out_unlock; 230a44cb944SVladimir Davydov } 231cbb79694SChristoph Lameter 232794b1248SVladimir Davydov s = do_kmem_cache_create(cache_name, size, size, 233794b1248SVladimir Davydov calculate_alignment(flags, align, size), 234794b1248SVladimir Davydov flags, ctor, NULL, NULL); 235794b1248SVladimir Davydov if (IS_ERR(s)) { 236794b1248SVladimir Davydov err = PTR_ERR(s); 237794b1248SVladimir Davydov kfree(cache_name); 238794b1248SVladimir Davydov } 239db265ecaSChristoph Lameter 2403965fc36SVladimir Davydov out_unlock: 24120cea968SChristoph Lameter mutex_unlock(&slab_mutex); 24220cea968SChristoph Lameter put_online_cpus(); 24320cea968SChristoph Lameter 244ba3253c7SDave Jones if (err) { 245686d550dSChristoph Lameter if (flags & SLAB_PANIC) 246686d550dSChristoph Lameter panic("kmem_cache_create: Failed to create slab '%s'. Error %d\n", 247686d550dSChristoph Lameter name, err); 248686d550dSChristoph Lameter else { 249686d550dSChristoph Lameter printk(KERN_WARNING "kmem_cache_create(%s) failed with error %d", 250686d550dSChristoph Lameter name, err); 251686d550dSChristoph Lameter dump_stack(); 252686d550dSChristoph Lameter } 253686d550dSChristoph Lameter return NULL; 254686d550dSChristoph Lameter } 255039363f3SChristoph Lameter return s; 256794b1248SVladimir Davydov } 257794b1248SVladimir Davydov EXPORT_SYMBOL(kmem_cache_create); 2583965fc36SVladimir Davydov 259794b1248SVladimir Davydov #ifdef CONFIG_MEMCG_KMEM 260794b1248SVladimir Davydov /* 261794b1248SVladimir Davydov * kmem_cache_create_memcg - Create a cache for a memory cgroup. 262794b1248SVladimir Davydov * @memcg: The memory cgroup the new cache is for. 263794b1248SVladimir Davydov * @root_cache: The parent of the new cache. 264794b1248SVladimir Davydov * 265794b1248SVladimir Davydov * This function attempts to create a kmem cache that will serve allocation 266794b1248SVladimir Davydov * requests going from @memcg to @root_cache. The new cache inherits properties 267794b1248SVladimir Davydov * from its parent. 268794b1248SVladimir Davydov */ 269794b1248SVladimir Davydov void kmem_cache_create_memcg(struct mem_cgroup *memcg, struct kmem_cache *root_cache) 270794b1248SVladimir Davydov { 271794b1248SVladimir Davydov struct kmem_cache *s; 272794b1248SVladimir Davydov char *cache_name; 273794b1248SVladimir Davydov 274794b1248SVladimir Davydov get_online_cpus(); 275794b1248SVladimir Davydov mutex_lock(&slab_mutex); 276794b1248SVladimir Davydov 277794b1248SVladimir Davydov /* 278794b1248SVladimir Davydov * Since per-memcg caches are created asynchronously on first 279794b1248SVladimir Davydov * allocation (see memcg_kmem_get_cache()), several threads can try to 280794b1248SVladimir Davydov * create the same cache, but only one of them may succeed. 281794b1248SVladimir Davydov */ 282794b1248SVladimir Davydov if (cache_from_memcg_idx(root_cache, memcg_cache_id(memcg))) 283794b1248SVladimir Davydov goto out_unlock; 284794b1248SVladimir Davydov 285794b1248SVladimir Davydov cache_name = memcg_create_cache_name(memcg, root_cache); 286794b1248SVladimir Davydov if (!cache_name) 287794b1248SVladimir Davydov goto out_unlock; 288794b1248SVladimir Davydov 289794b1248SVladimir Davydov s = do_kmem_cache_create(cache_name, root_cache->object_size, 290794b1248SVladimir Davydov root_cache->size, root_cache->align, 291794b1248SVladimir Davydov root_cache->flags, root_cache->ctor, 292794b1248SVladimir Davydov memcg, root_cache); 2935dfb4175SVladimir Davydov if (IS_ERR(s)) 294794b1248SVladimir Davydov kfree(cache_name); 295794b1248SVladimir Davydov 296794b1248SVladimir Davydov out_unlock: 297794b1248SVladimir Davydov mutex_unlock(&slab_mutex); 298794b1248SVladimir Davydov put_online_cpus(); 2992633d7a0SGlauber Costa } 300b8529907SVladimir Davydov 301b8529907SVladimir Davydov static int kmem_cache_destroy_memcg_children(struct kmem_cache *s) 302b8529907SVladimir Davydov { 303b8529907SVladimir Davydov int rc; 304b8529907SVladimir Davydov 305b8529907SVladimir Davydov if (!s->memcg_params || 306b8529907SVladimir Davydov !s->memcg_params->is_root_cache) 307b8529907SVladimir Davydov return 0; 308b8529907SVladimir Davydov 309b8529907SVladimir Davydov mutex_unlock(&slab_mutex); 310b8529907SVladimir Davydov rc = __kmem_cache_destroy_memcg_children(s); 311b8529907SVladimir Davydov mutex_lock(&slab_mutex); 312b8529907SVladimir Davydov 313b8529907SVladimir Davydov return rc; 314b8529907SVladimir Davydov } 315b8529907SVladimir Davydov #else 316b8529907SVladimir Davydov static int kmem_cache_destroy_memcg_children(struct kmem_cache *s) 317b8529907SVladimir Davydov { 318b8529907SVladimir Davydov return 0; 319b8529907SVladimir Davydov } 320794b1248SVladimir Davydov #endif /* CONFIG_MEMCG_KMEM */ 32197d06609SChristoph Lameter 32241a21285SChristoph Lameter void slab_kmem_cache_release(struct kmem_cache *s) 32341a21285SChristoph Lameter { 32441a21285SChristoph Lameter kfree(s->name); 32541a21285SChristoph Lameter kmem_cache_free(kmem_cache, s); 32641a21285SChristoph Lameter } 32741a21285SChristoph Lameter 328945cf2b6SChristoph Lameter void kmem_cache_destroy(struct kmem_cache *s) 329945cf2b6SChristoph Lameter { 330945cf2b6SChristoph Lameter get_online_cpus(); 331945cf2b6SChristoph Lameter mutex_lock(&slab_mutex); 332b8529907SVladimir Davydov 333945cf2b6SChristoph Lameter s->refcount--; 334b8529907SVladimir Davydov if (s->refcount) 335b8529907SVladimir Davydov goto out_unlock; 336b8529907SVladimir Davydov 337b8529907SVladimir Davydov if (kmem_cache_destroy_memcg_children(s) != 0) 338b8529907SVladimir Davydov goto out_unlock; 339b8529907SVladimir Davydov 340945cf2b6SChristoph Lameter list_del(&s->list); 341051dd460SVladimir Davydov memcg_unregister_cache(s); 342945cf2b6SChristoph Lameter 343b8529907SVladimir Davydov if (__kmem_cache_shutdown(s) != 0) { 344b8529907SVladimir Davydov list_add(&s->list, &slab_caches); 345b8529907SVladimir Davydov memcg_register_cache(s); 346b8529907SVladimir Davydov printk(KERN_ERR "kmem_cache_destroy %s: " 347b8529907SVladimir Davydov "Slab cache still has objects\n", s->name); 348b8529907SVladimir Davydov dump_stack(); 349b8529907SVladimir Davydov goto out_unlock; 350b8529907SVladimir Davydov } 351b8529907SVladimir Davydov 352210ed9deSJiri Kosina mutex_unlock(&slab_mutex); 353945cf2b6SChristoph Lameter if (s->flags & SLAB_DESTROY_BY_RCU) 354945cf2b6SChristoph Lameter rcu_barrier(); 355945cf2b6SChristoph Lameter 3561aa13254SVladimir Davydov memcg_free_cache_params(s); 35741a21285SChristoph Lameter #ifdef SLAB_SUPPORTS_SYSFS 35841a21285SChristoph Lameter sysfs_slab_remove(s); 35941a21285SChristoph Lameter #else 36041a21285SChristoph Lameter slab_kmem_cache_release(s); 36141a21285SChristoph Lameter #endif 362b8529907SVladimir Davydov goto out_put_cpus; 363b8529907SVladimir Davydov 364b8529907SVladimir Davydov out_unlock: 365210ed9deSJiri Kosina mutex_unlock(&slab_mutex); 366b8529907SVladimir Davydov out_put_cpus: 367945cf2b6SChristoph Lameter put_online_cpus(); 368945cf2b6SChristoph Lameter } 369945cf2b6SChristoph Lameter EXPORT_SYMBOL(kmem_cache_destroy); 370945cf2b6SChristoph Lameter 37197d06609SChristoph Lameter int slab_is_available(void) 37297d06609SChristoph Lameter { 37397d06609SChristoph Lameter return slab_state >= UP; 37497d06609SChristoph Lameter } 375b7454ad3SGlauber Costa 37645530c44SChristoph Lameter #ifndef CONFIG_SLOB 37745530c44SChristoph Lameter /* Create a cache during boot when no slab services are available yet */ 37845530c44SChristoph Lameter void __init create_boot_cache(struct kmem_cache *s, const char *name, size_t size, 37945530c44SChristoph Lameter unsigned long flags) 38045530c44SChristoph Lameter { 38145530c44SChristoph Lameter int err; 38245530c44SChristoph Lameter 38345530c44SChristoph Lameter s->name = name; 38445530c44SChristoph Lameter s->size = s->object_size = size; 38545906855SChristoph Lameter s->align = calculate_alignment(flags, ARCH_KMALLOC_MINALIGN, size); 38645530c44SChristoph Lameter err = __kmem_cache_create(s, flags); 38745530c44SChristoph Lameter 38845530c44SChristoph Lameter if (err) 38931ba7346SChristoph Lameter panic("Creation of kmalloc slab %s size=%zu failed. Reason %d\n", 39045530c44SChristoph Lameter name, size, err); 39145530c44SChristoph Lameter 39245530c44SChristoph Lameter s->refcount = -1; /* Exempt from merging for now */ 39345530c44SChristoph Lameter } 39445530c44SChristoph Lameter 39545530c44SChristoph Lameter struct kmem_cache *__init create_kmalloc_cache(const char *name, size_t size, 39645530c44SChristoph Lameter unsigned long flags) 39745530c44SChristoph Lameter { 39845530c44SChristoph Lameter struct kmem_cache *s = kmem_cache_zalloc(kmem_cache, GFP_NOWAIT); 39945530c44SChristoph Lameter 40045530c44SChristoph Lameter if (!s) 40145530c44SChristoph Lameter panic("Out of memory when creating slab %s\n", name); 40245530c44SChristoph Lameter 40345530c44SChristoph Lameter create_boot_cache(s, name, size, flags); 40445530c44SChristoph Lameter list_add(&s->list, &slab_caches); 40545530c44SChristoph Lameter s->refcount = 1; 40645530c44SChristoph Lameter return s; 40745530c44SChristoph Lameter } 40845530c44SChristoph Lameter 4099425c58eSChristoph Lameter struct kmem_cache *kmalloc_caches[KMALLOC_SHIFT_HIGH + 1]; 4109425c58eSChristoph Lameter EXPORT_SYMBOL(kmalloc_caches); 4119425c58eSChristoph Lameter 4129425c58eSChristoph Lameter #ifdef CONFIG_ZONE_DMA 4139425c58eSChristoph Lameter struct kmem_cache *kmalloc_dma_caches[KMALLOC_SHIFT_HIGH + 1]; 4149425c58eSChristoph Lameter EXPORT_SYMBOL(kmalloc_dma_caches); 4159425c58eSChristoph Lameter #endif 4169425c58eSChristoph Lameter 417f97d5f63SChristoph Lameter /* 4182c59dd65SChristoph Lameter * Conversion table for small slabs sizes / 8 to the index in the 4192c59dd65SChristoph Lameter * kmalloc array. This is necessary for slabs < 192 since we have non power 4202c59dd65SChristoph Lameter * of two cache sizes there. The size of larger slabs can be determined using 4212c59dd65SChristoph Lameter * fls. 4222c59dd65SChristoph Lameter */ 4232c59dd65SChristoph Lameter static s8 size_index[24] = { 4242c59dd65SChristoph Lameter 3, /* 8 */ 4252c59dd65SChristoph Lameter 4, /* 16 */ 4262c59dd65SChristoph Lameter 5, /* 24 */ 4272c59dd65SChristoph Lameter 5, /* 32 */ 4282c59dd65SChristoph Lameter 6, /* 40 */ 4292c59dd65SChristoph Lameter 6, /* 48 */ 4302c59dd65SChristoph Lameter 6, /* 56 */ 4312c59dd65SChristoph Lameter 6, /* 64 */ 4322c59dd65SChristoph Lameter 1, /* 72 */ 4332c59dd65SChristoph Lameter 1, /* 80 */ 4342c59dd65SChristoph Lameter 1, /* 88 */ 4352c59dd65SChristoph Lameter 1, /* 96 */ 4362c59dd65SChristoph Lameter 7, /* 104 */ 4372c59dd65SChristoph Lameter 7, /* 112 */ 4382c59dd65SChristoph Lameter 7, /* 120 */ 4392c59dd65SChristoph Lameter 7, /* 128 */ 4402c59dd65SChristoph Lameter 2, /* 136 */ 4412c59dd65SChristoph Lameter 2, /* 144 */ 4422c59dd65SChristoph Lameter 2, /* 152 */ 4432c59dd65SChristoph Lameter 2, /* 160 */ 4442c59dd65SChristoph Lameter 2, /* 168 */ 4452c59dd65SChristoph Lameter 2, /* 176 */ 4462c59dd65SChristoph Lameter 2, /* 184 */ 4472c59dd65SChristoph Lameter 2 /* 192 */ 4482c59dd65SChristoph Lameter }; 4492c59dd65SChristoph Lameter 4502c59dd65SChristoph Lameter static inline int size_index_elem(size_t bytes) 4512c59dd65SChristoph Lameter { 4522c59dd65SChristoph Lameter return (bytes - 1) / 8; 4532c59dd65SChristoph Lameter } 4542c59dd65SChristoph Lameter 4552c59dd65SChristoph Lameter /* 4562c59dd65SChristoph Lameter * Find the kmem_cache structure that serves a given size of 4572c59dd65SChristoph Lameter * allocation 4582c59dd65SChristoph Lameter */ 4592c59dd65SChristoph Lameter struct kmem_cache *kmalloc_slab(size_t size, gfp_t flags) 4602c59dd65SChristoph Lameter { 4612c59dd65SChristoph Lameter int index; 4622c59dd65SChristoph Lameter 4639de1bc87SJoonsoo Kim if (unlikely(size > KMALLOC_MAX_SIZE)) { 464907985f4SSasha Levin WARN_ON_ONCE(!(flags & __GFP_NOWARN)); 4656286ae97SChristoph Lameter return NULL; 466907985f4SSasha Levin } 4676286ae97SChristoph Lameter 4682c59dd65SChristoph Lameter if (size <= 192) { 4692c59dd65SChristoph Lameter if (!size) 4702c59dd65SChristoph Lameter return ZERO_SIZE_PTR; 4712c59dd65SChristoph Lameter 4722c59dd65SChristoph Lameter index = size_index[size_index_elem(size)]; 4732c59dd65SChristoph Lameter } else 4742c59dd65SChristoph Lameter index = fls(size - 1); 4752c59dd65SChristoph Lameter 4762c59dd65SChristoph Lameter #ifdef CONFIG_ZONE_DMA 477b1e05416SJoonsoo Kim if (unlikely((flags & GFP_DMA))) 4782c59dd65SChristoph Lameter return kmalloc_dma_caches[index]; 4792c59dd65SChristoph Lameter 4802c59dd65SChristoph Lameter #endif 4812c59dd65SChristoph Lameter return kmalloc_caches[index]; 4822c59dd65SChristoph Lameter } 4832c59dd65SChristoph Lameter 4842c59dd65SChristoph Lameter /* 485f97d5f63SChristoph Lameter * Create the kmalloc array. Some of the regular kmalloc arrays 486f97d5f63SChristoph Lameter * may already have been created because they were needed to 487f97d5f63SChristoph Lameter * enable allocations for slab creation. 488f97d5f63SChristoph Lameter */ 489f97d5f63SChristoph Lameter void __init create_kmalloc_caches(unsigned long flags) 490f97d5f63SChristoph Lameter { 491f97d5f63SChristoph Lameter int i; 492f97d5f63SChristoph Lameter 4932c59dd65SChristoph Lameter /* 4942c59dd65SChristoph Lameter * Patch up the size_index table if we have strange large alignment 4952c59dd65SChristoph Lameter * requirements for the kmalloc array. This is only the case for 4962c59dd65SChristoph Lameter * MIPS it seems. The standard arches will not generate any code here. 4972c59dd65SChristoph Lameter * 4982c59dd65SChristoph Lameter * Largest permitted alignment is 256 bytes due to the way we 4992c59dd65SChristoph Lameter * handle the index determination for the smaller caches. 5002c59dd65SChristoph Lameter * 5012c59dd65SChristoph Lameter * Make sure that nothing crazy happens if someone starts tinkering 5022c59dd65SChristoph Lameter * around with ARCH_KMALLOC_MINALIGN 5032c59dd65SChristoph Lameter */ 5042c59dd65SChristoph Lameter BUILD_BUG_ON(KMALLOC_MIN_SIZE > 256 || 5052c59dd65SChristoph Lameter (KMALLOC_MIN_SIZE & (KMALLOC_MIN_SIZE - 1))); 5062c59dd65SChristoph Lameter 5072c59dd65SChristoph Lameter for (i = 8; i < KMALLOC_MIN_SIZE; i += 8) { 5082c59dd65SChristoph Lameter int elem = size_index_elem(i); 5092c59dd65SChristoph Lameter 5102c59dd65SChristoph Lameter if (elem >= ARRAY_SIZE(size_index)) 5112c59dd65SChristoph Lameter break; 5122c59dd65SChristoph Lameter size_index[elem] = KMALLOC_SHIFT_LOW; 5132c59dd65SChristoph Lameter } 5142c59dd65SChristoph Lameter 5152c59dd65SChristoph Lameter if (KMALLOC_MIN_SIZE >= 64) { 5162c59dd65SChristoph Lameter /* 5172c59dd65SChristoph Lameter * The 96 byte size cache is not used if the alignment 5182c59dd65SChristoph Lameter * is 64 byte. 5192c59dd65SChristoph Lameter */ 5202c59dd65SChristoph Lameter for (i = 64 + 8; i <= 96; i += 8) 5212c59dd65SChristoph Lameter size_index[size_index_elem(i)] = 7; 5222c59dd65SChristoph Lameter 5232c59dd65SChristoph Lameter } 5242c59dd65SChristoph Lameter 5252c59dd65SChristoph Lameter if (KMALLOC_MIN_SIZE >= 128) { 5262c59dd65SChristoph Lameter /* 5272c59dd65SChristoph Lameter * The 192 byte sized cache is not used if the alignment 5282c59dd65SChristoph Lameter * is 128 byte. Redirect kmalloc to use the 256 byte cache 5292c59dd65SChristoph Lameter * instead. 5302c59dd65SChristoph Lameter */ 5312c59dd65SChristoph Lameter for (i = 128 + 8; i <= 192; i += 8) 5322c59dd65SChristoph Lameter size_index[size_index_elem(i)] = 8; 5332c59dd65SChristoph Lameter } 5348a965b3bSChristoph Lameter for (i = KMALLOC_SHIFT_LOW; i <= KMALLOC_SHIFT_HIGH; i++) { 5358a965b3bSChristoph Lameter if (!kmalloc_caches[i]) { 536f97d5f63SChristoph Lameter kmalloc_caches[i] = create_kmalloc_cache(NULL, 537f97d5f63SChristoph Lameter 1 << i, flags); 538956e46efSChris Mason } 539f97d5f63SChristoph Lameter 5408a965b3bSChristoph Lameter /* 5418a965b3bSChristoph Lameter * Caches that are not of the two-to-the-power-of size. 5428a965b3bSChristoph Lameter * These have to be created immediately after the 5438a965b3bSChristoph Lameter * earlier power of two caches 5448a965b3bSChristoph Lameter */ 5458a965b3bSChristoph Lameter if (KMALLOC_MIN_SIZE <= 32 && !kmalloc_caches[1] && i == 6) 5468a965b3bSChristoph Lameter kmalloc_caches[1] = create_kmalloc_cache(NULL, 96, flags); 5478a965b3bSChristoph Lameter 5488a965b3bSChristoph Lameter if (KMALLOC_MIN_SIZE <= 64 && !kmalloc_caches[2] && i == 7) 5498a965b3bSChristoph Lameter kmalloc_caches[2] = create_kmalloc_cache(NULL, 192, flags); 5508a965b3bSChristoph Lameter } 5518a965b3bSChristoph Lameter 552f97d5f63SChristoph Lameter /* Kmalloc array is now usable */ 553f97d5f63SChristoph Lameter slab_state = UP; 554f97d5f63SChristoph Lameter 555f97d5f63SChristoph Lameter for (i = 0; i <= KMALLOC_SHIFT_HIGH; i++) { 556f97d5f63SChristoph Lameter struct kmem_cache *s = kmalloc_caches[i]; 557f97d5f63SChristoph Lameter char *n; 558f97d5f63SChristoph Lameter 559f97d5f63SChristoph Lameter if (s) { 560f97d5f63SChristoph Lameter n = kasprintf(GFP_NOWAIT, "kmalloc-%d", kmalloc_size(i)); 561f97d5f63SChristoph Lameter 562f97d5f63SChristoph Lameter BUG_ON(!n); 563f97d5f63SChristoph Lameter s->name = n; 564f97d5f63SChristoph Lameter } 565f97d5f63SChristoph Lameter } 566f97d5f63SChristoph Lameter 567f97d5f63SChristoph Lameter #ifdef CONFIG_ZONE_DMA 568f97d5f63SChristoph Lameter for (i = 0; i <= KMALLOC_SHIFT_HIGH; i++) { 569f97d5f63SChristoph Lameter struct kmem_cache *s = kmalloc_caches[i]; 570f97d5f63SChristoph Lameter 571f97d5f63SChristoph Lameter if (s) { 572f97d5f63SChristoph Lameter int size = kmalloc_size(i); 573f97d5f63SChristoph Lameter char *n = kasprintf(GFP_NOWAIT, 574f97d5f63SChristoph Lameter "dma-kmalloc-%d", size); 575f97d5f63SChristoph Lameter 576f97d5f63SChristoph Lameter BUG_ON(!n); 577f97d5f63SChristoph Lameter kmalloc_dma_caches[i] = create_kmalloc_cache(n, 578f97d5f63SChristoph Lameter size, SLAB_CACHE_DMA | flags); 579f97d5f63SChristoph Lameter } 580f97d5f63SChristoph Lameter } 581f97d5f63SChristoph Lameter #endif 582f97d5f63SChristoph Lameter } 58345530c44SChristoph Lameter #endif /* !CONFIG_SLOB */ 58445530c44SChristoph Lameter 585*cea371f4SVladimir Davydov /* 586*cea371f4SVladimir Davydov * To avoid unnecessary overhead, we pass through large allocation requests 587*cea371f4SVladimir Davydov * directly to the page allocator. We use __GFP_COMP, because we will need to 588*cea371f4SVladimir Davydov * know the allocation order to free the pages properly in kfree. 589*cea371f4SVladimir Davydov */ 59052383431SVladimir Davydov void *kmalloc_order(size_t size, gfp_t flags, unsigned int order) 59152383431SVladimir Davydov { 59252383431SVladimir Davydov void *ret; 59352383431SVladimir Davydov struct page *page; 59452383431SVladimir Davydov 59552383431SVladimir Davydov flags |= __GFP_COMP; 59652383431SVladimir Davydov page = alloc_kmem_pages(flags, order); 59752383431SVladimir Davydov ret = page ? page_address(page) : NULL; 59852383431SVladimir Davydov kmemleak_alloc(ret, size, 1, flags); 59952383431SVladimir Davydov return ret; 60052383431SVladimir Davydov } 60152383431SVladimir Davydov EXPORT_SYMBOL(kmalloc_order); 60252383431SVladimir Davydov 603f1b6eb6eSChristoph Lameter #ifdef CONFIG_TRACING 604f1b6eb6eSChristoph Lameter void *kmalloc_order_trace(size_t size, gfp_t flags, unsigned int order) 605f1b6eb6eSChristoph Lameter { 606f1b6eb6eSChristoph Lameter void *ret = kmalloc_order(size, flags, order); 607f1b6eb6eSChristoph Lameter trace_kmalloc(_RET_IP_, ret, size, PAGE_SIZE << order, flags); 608f1b6eb6eSChristoph Lameter return ret; 609f1b6eb6eSChristoph Lameter } 610f1b6eb6eSChristoph Lameter EXPORT_SYMBOL(kmalloc_order_trace); 611f1b6eb6eSChristoph Lameter #endif 61245530c44SChristoph Lameter 613b7454ad3SGlauber Costa #ifdef CONFIG_SLABINFO 614e9b4db2bSWanpeng Li 615e9b4db2bSWanpeng Li #ifdef CONFIG_SLAB 616e9b4db2bSWanpeng Li #define SLABINFO_RIGHTS (S_IWUSR | S_IRUSR) 617e9b4db2bSWanpeng Li #else 618e9b4db2bSWanpeng Li #define SLABINFO_RIGHTS S_IRUSR 619e9b4db2bSWanpeng Li #endif 620e9b4db2bSWanpeng Li 621749c5415SGlauber Costa void print_slabinfo_header(struct seq_file *m) 622bcee6e2aSGlauber Costa { 623bcee6e2aSGlauber Costa /* 624bcee6e2aSGlauber Costa * Output format version, so at least we can change it 625bcee6e2aSGlauber Costa * without _too_ many complaints. 626bcee6e2aSGlauber Costa */ 627bcee6e2aSGlauber Costa #ifdef CONFIG_DEBUG_SLAB 628bcee6e2aSGlauber Costa seq_puts(m, "slabinfo - version: 2.1 (statistics)\n"); 629bcee6e2aSGlauber Costa #else 630bcee6e2aSGlauber Costa seq_puts(m, "slabinfo - version: 2.1\n"); 631bcee6e2aSGlauber Costa #endif 632bcee6e2aSGlauber Costa seq_puts(m, "# name <active_objs> <num_objs> <objsize> " 633bcee6e2aSGlauber Costa "<objperslab> <pagesperslab>"); 634bcee6e2aSGlauber Costa seq_puts(m, " : tunables <limit> <batchcount> <sharedfactor>"); 635bcee6e2aSGlauber Costa seq_puts(m, " : slabdata <active_slabs> <num_slabs> <sharedavail>"); 636bcee6e2aSGlauber Costa #ifdef CONFIG_DEBUG_SLAB 637bcee6e2aSGlauber Costa seq_puts(m, " : globalstat <listallocs> <maxobjs> <grown> <reaped> " 638bcee6e2aSGlauber Costa "<error> <maxfreeable> <nodeallocs> <remotefrees> <alienoverflow>"); 639bcee6e2aSGlauber Costa seq_puts(m, " : cpustat <allochit> <allocmiss> <freehit> <freemiss>"); 640bcee6e2aSGlauber Costa #endif 641bcee6e2aSGlauber Costa seq_putc(m, '\n'); 642bcee6e2aSGlauber Costa } 643bcee6e2aSGlauber Costa 644b7454ad3SGlauber Costa static void *s_start(struct seq_file *m, loff_t *pos) 645b7454ad3SGlauber Costa { 646b7454ad3SGlauber Costa loff_t n = *pos; 647b7454ad3SGlauber Costa 648b7454ad3SGlauber Costa mutex_lock(&slab_mutex); 649b7454ad3SGlauber Costa if (!n) 650b7454ad3SGlauber Costa print_slabinfo_header(m); 651b7454ad3SGlauber Costa 652b7454ad3SGlauber Costa return seq_list_start(&slab_caches, *pos); 653b7454ad3SGlauber Costa } 654b7454ad3SGlauber Costa 655276a2439SWanpeng Li void *slab_next(struct seq_file *m, void *p, loff_t *pos) 656b7454ad3SGlauber Costa { 657b7454ad3SGlauber Costa return seq_list_next(p, &slab_caches, pos); 658b7454ad3SGlauber Costa } 659b7454ad3SGlauber Costa 660276a2439SWanpeng Li void slab_stop(struct seq_file *m, void *p) 661b7454ad3SGlauber Costa { 662b7454ad3SGlauber Costa mutex_unlock(&slab_mutex); 663b7454ad3SGlauber Costa } 664b7454ad3SGlauber Costa 665749c5415SGlauber Costa static void 666749c5415SGlauber Costa memcg_accumulate_slabinfo(struct kmem_cache *s, struct slabinfo *info) 667b7454ad3SGlauber Costa { 668749c5415SGlauber Costa struct kmem_cache *c; 669749c5415SGlauber Costa struct slabinfo sinfo; 670749c5415SGlauber Costa int i; 671749c5415SGlauber Costa 672749c5415SGlauber Costa if (!is_root_cache(s)) 673749c5415SGlauber Costa return; 674749c5415SGlauber Costa 675749c5415SGlauber Costa for_each_memcg_cache_index(i) { 6762ade4de8SQiang Huang c = cache_from_memcg_idx(s, i); 677749c5415SGlauber Costa if (!c) 678749c5415SGlauber Costa continue; 679749c5415SGlauber Costa 680749c5415SGlauber Costa memset(&sinfo, 0, sizeof(sinfo)); 681749c5415SGlauber Costa get_slabinfo(c, &sinfo); 682749c5415SGlauber Costa 683749c5415SGlauber Costa info->active_slabs += sinfo.active_slabs; 684749c5415SGlauber Costa info->num_slabs += sinfo.num_slabs; 685749c5415SGlauber Costa info->shared_avail += sinfo.shared_avail; 686749c5415SGlauber Costa info->active_objs += sinfo.active_objs; 687749c5415SGlauber Costa info->num_objs += sinfo.num_objs; 688749c5415SGlauber Costa } 689749c5415SGlauber Costa } 690749c5415SGlauber Costa 691749c5415SGlauber Costa int cache_show(struct kmem_cache *s, struct seq_file *m) 692749c5415SGlauber Costa { 6930d7561c6SGlauber Costa struct slabinfo sinfo; 6940d7561c6SGlauber Costa 6950d7561c6SGlauber Costa memset(&sinfo, 0, sizeof(sinfo)); 6960d7561c6SGlauber Costa get_slabinfo(s, &sinfo); 6970d7561c6SGlauber Costa 698749c5415SGlauber Costa memcg_accumulate_slabinfo(s, &sinfo); 699749c5415SGlauber Costa 7000d7561c6SGlauber Costa seq_printf(m, "%-17s %6lu %6lu %6u %4u %4d", 701749c5415SGlauber Costa cache_name(s), sinfo.active_objs, sinfo.num_objs, s->size, 7020d7561c6SGlauber Costa sinfo.objects_per_slab, (1 << sinfo.cache_order)); 7030d7561c6SGlauber Costa 7040d7561c6SGlauber Costa seq_printf(m, " : tunables %4u %4u %4u", 7050d7561c6SGlauber Costa sinfo.limit, sinfo.batchcount, sinfo.shared); 7060d7561c6SGlauber Costa seq_printf(m, " : slabdata %6lu %6lu %6lu", 7070d7561c6SGlauber Costa sinfo.active_slabs, sinfo.num_slabs, sinfo.shared_avail); 7080d7561c6SGlauber Costa slabinfo_show_stats(m, s); 7090d7561c6SGlauber Costa seq_putc(m, '\n'); 7100d7561c6SGlauber Costa return 0; 711b7454ad3SGlauber Costa } 712b7454ad3SGlauber Costa 713749c5415SGlauber Costa static int s_show(struct seq_file *m, void *p) 714749c5415SGlauber Costa { 715749c5415SGlauber Costa struct kmem_cache *s = list_entry(p, struct kmem_cache, list); 716749c5415SGlauber Costa 717749c5415SGlauber Costa if (!is_root_cache(s)) 718749c5415SGlauber Costa return 0; 719749c5415SGlauber Costa return cache_show(s, m); 720749c5415SGlauber Costa } 721749c5415SGlauber Costa 722b7454ad3SGlauber Costa /* 723b7454ad3SGlauber Costa * slabinfo_op - iterator that generates /proc/slabinfo 724b7454ad3SGlauber Costa * 725b7454ad3SGlauber Costa * Output layout: 726b7454ad3SGlauber Costa * cache-name 727b7454ad3SGlauber Costa * num-active-objs 728b7454ad3SGlauber Costa * total-objs 729b7454ad3SGlauber Costa * object size 730b7454ad3SGlauber Costa * num-active-slabs 731b7454ad3SGlauber Costa * total-slabs 732b7454ad3SGlauber Costa * num-pages-per-slab 733b7454ad3SGlauber Costa * + further values on SMP and with statistics enabled 734b7454ad3SGlauber Costa */ 735b7454ad3SGlauber Costa static const struct seq_operations slabinfo_op = { 736b7454ad3SGlauber Costa .start = s_start, 737276a2439SWanpeng Li .next = slab_next, 738276a2439SWanpeng Li .stop = slab_stop, 739b7454ad3SGlauber Costa .show = s_show, 740b7454ad3SGlauber Costa }; 741b7454ad3SGlauber Costa 742b7454ad3SGlauber Costa static int slabinfo_open(struct inode *inode, struct file *file) 743b7454ad3SGlauber Costa { 744b7454ad3SGlauber Costa return seq_open(file, &slabinfo_op); 745b7454ad3SGlauber Costa } 746b7454ad3SGlauber Costa 747b7454ad3SGlauber Costa static const struct file_operations proc_slabinfo_operations = { 748b7454ad3SGlauber Costa .open = slabinfo_open, 749b7454ad3SGlauber Costa .read = seq_read, 750b7454ad3SGlauber Costa .write = slabinfo_write, 751b7454ad3SGlauber Costa .llseek = seq_lseek, 752b7454ad3SGlauber Costa .release = seq_release, 753b7454ad3SGlauber Costa }; 754b7454ad3SGlauber Costa 755b7454ad3SGlauber Costa static int __init slab_proc_init(void) 756b7454ad3SGlauber Costa { 757e9b4db2bSWanpeng Li proc_create("slabinfo", SLABINFO_RIGHTS, NULL, 758e9b4db2bSWanpeng Li &proc_slabinfo_operations); 759b7454ad3SGlauber Costa return 0; 760b7454ad3SGlauber Costa } 761b7454ad3SGlauber Costa module_init(slab_proc_init); 762b7454ad3SGlauber Costa #endif /* CONFIG_SLABINFO */ 763