linux/mm/slab_common.c
<<
>>
Prefs
   1/*
   2 * Slab allocator functions that are independent of the allocator strategy
   3 *
   4 * (C) 2012 Christoph Lameter <cl@linux.com>
   5 */
   6#include <linux/slab.h>
   7
   8#include <linux/mm.h>
   9#include <linux/poison.h>
  10#include <linux/interrupt.h>
  11#include <linux/memory.h>
  12#include <linux/compiler.h>
  13#include <linux/module.h>
  14#include <linux/cpu.h>
  15#include <linux/uaccess.h>
  16#include <linux/seq_file.h>
  17#include <linux/proc_fs.h>
  18#include <asm/cacheflush.h>
  19#include <asm/tlbflush.h>
  20#include <asm/page.h>
  21#include <linux/memcontrol.h>
  22
  23#include "slab.h"
  24
  25enum slab_state slab_state;
  26LIST_HEAD(slab_caches);
  27DEFINE_MUTEX(slab_mutex);
  28struct kmem_cache *kmem_cache;
  29
  30#ifdef CONFIG_DEBUG_VM
  31static int kmem_cache_sanity_check(struct mem_cgroup *memcg, const char *name,
  32                                   size_t size)
  33{
  34        struct kmem_cache *s = NULL;
  35
  36        if (!name || in_interrupt() || size < sizeof(void *) ||
  37                size > KMALLOC_MAX_SIZE) {
  38                pr_err("kmem_cache_create(%s) integrity check failed\n", name);
  39                return -EINVAL;
  40        }
  41
  42        list_for_each_entry(s, &slab_caches, list) {
  43                char tmp;
  44                int res;
  45
  46                /*
  47                 * This happens when the module gets unloaded and doesn't
  48                 * destroy its slab cache and no-one else reuses the vmalloc
  49                 * area of the module.  Print a warning.
  50                 */
  51                res = probe_kernel_address(s->name, tmp);
  52                if (res) {
  53                        pr_err("Slab cache with size %d has lost its name\n",
  54                               s->object_size);
  55                        continue;
  56                }
  57
  58                /*
  59                 * For simplicity, we won't check this in the list of memcg
  60                 * caches. We have control over memcg naming, and if there
  61                 * aren't duplicates in the global list, there won't be any
  62                 * duplicates in the memcg lists as well.
  63                 */
  64                if (!memcg && !strcmp(s->name, name)) {
  65                        pr_err("%s (%s): Cache name already exists.\n",
  66                               __func__, name);
  67                        dump_stack();
  68                        s = NULL;
  69                        return -EINVAL;
  70                }
  71        }
  72
  73        WARN_ON(strchr(name, ' '));     /* It confuses parsers */
  74        return 0;
  75}
  76#else
  77static inline int kmem_cache_sanity_check(struct mem_cgroup *memcg,
  78                                          const char *name, size_t size)
  79{
  80        return 0;
  81}
  82#endif
  83
  84#ifdef CONFIG_MEMCG_KMEM
  85int memcg_update_all_caches(int num_memcgs)
  86{
  87        struct kmem_cache *s;
  88        int ret = 0;
  89        mutex_lock(&slab_mutex);
  90
  91        list_for_each_entry(s, &slab_caches, list) {
  92                if (!is_root_cache(s))
  93                        continue;
  94
  95                ret = memcg_update_cache_size(s, num_memcgs);
  96                /*
  97                 * See comment in memcontrol.c, memcg_update_cache_size:
  98                 * Instead of freeing the memory, we'll just leave the caches
  99                 * up to this point in an updated state.
 100                 */
 101                if (ret)
 102                        goto out;
 103        }
 104
 105        memcg_update_array_size(num_memcgs);
 106out:
 107        mutex_unlock(&slab_mutex);
 108        return ret;
 109}
 110#endif
 111
 112/*
 113 * Figure out what the alignment of the objects will be given a set of
 114 * flags, a user specified alignment and the size of the objects.
 115 */
 116unsigned long calculate_alignment(unsigned long flags,
 117                unsigned long align, unsigned long size)
 118{
 119        /*
 120         * If the user wants hardware cache aligned objects then follow that
 121         * suggestion if the object is sufficiently large.
 122         *
 123         * The hardware cache alignment cannot override the specified
 124         * alignment though. If that is greater then use it.
 125         */
 126        if (flags & SLAB_HWCACHE_ALIGN) {
 127                unsigned long ralign = cache_line_size();
 128                while (size <= ralign / 2)
 129                        ralign /= 2;
 130                align = max(align, ralign);
 131        }
 132
 133        if (align < ARCH_SLAB_MINALIGN)
 134                align = ARCH_SLAB_MINALIGN;
 135
 136        return ALIGN(align, sizeof(void *));
 137}
 138
 139
 140/*
 141 * kmem_cache_create - Create a cache.
 142 * @name: A string which is used in /proc/slabinfo to identify this cache.
 143 * @size: The size of objects to be created in this cache.
 144 * @align: The required alignment for the objects.
 145 * @flags: SLAB flags
 146 * @ctor: A constructor for the objects.
 147 *
 148 * Returns a ptr to the cache on success, NULL on failure.
 149 * Cannot be called within a interrupt, but can be interrupted.
 150 * The @ctor is run when new pages are allocated by the cache.
 151 *
 152 * The flags are
 153 *
 154 * %SLAB_POISON - Poison the slab with a known test pattern (a5a5a5a5)
 155 * to catch references to uninitialised memory.
 156 *
 157 * %SLAB_RED_ZONE - Insert `Red' zones around the allocated memory to check
 158 * for buffer overruns.
 159 *
 160 * %SLAB_HWCACHE_ALIGN - Align the objects in this cache to a hardware
 161 * cacheline.  This can be beneficial if you're counting cycles as closely
 162 * as davem.
 163 */
 164
 165struct kmem_cache *
 166kmem_cache_create_memcg(struct mem_cgroup *memcg, const char *name, size_t size,
 167                        size_t align, unsigned long flags, void (*ctor)(void *),
 168                        struct kmem_cache *parent_cache)
 169{
 170        struct kmem_cache *s = NULL;
 171        int err = 0;
 172
 173        get_online_cpus();
 174        mutex_lock(&slab_mutex);
 175
 176        if (!kmem_cache_sanity_check(memcg, name, size) == 0)
 177                goto out_locked;
 178
 179        /*
 180         * Some allocators will constraint the set of valid flags to a subset
 181         * of all flags. We expect them to define CACHE_CREATE_MASK in this
 182         * case, and we'll just provide them with a sanitized version of the
 183         * passed flags.
 184         */
 185        flags &= CACHE_CREATE_MASK;
 186
 187        s = __kmem_cache_alias(memcg, name, size, align, flags, ctor);
 188        if (s)
 189                goto out_locked;
 190
 191        s = kmem_cache_zalloc(kmem_cache, GFP_KERNEL);
 192        if (s) {
 193                s->object_size = s->size = size;
 194                s->align = calculate_alignment(flags, align, size);
 195                s->ctor = ctor;
 196
 197                if (memcg_register_cache(memcg, s, parent_cache)) {
 198                        kmem_cache_free(kmem_cache, s);
 199                        err = -ENOMEM;
 200                        goto out_locked;
 201                }
 202
 203                s->name = kstrdup(name, GFP_KERNEL);
 204                if (!s->name) {
 205                        kmem_cache_free(kmem_cache, s);
 206                        err = -ENOMEM;
 207                        goto out_locked;
 208                }
 209
 210                err = __kmem_cache_create(s, flags);
 211                if (!err) {
 212                        s->refcount = 1;
 213                        list_add(&s->list, &slab_caches);
 214                        memcg_cache_list_add(memcg, s);
 215                } else {
 216                        kfree(s->name);
 217                        kmem_cache_free(kmem_cache, s);
 218                }
 219        } else
 220                err = -ENOMEM;
 221
 222out_locked:
 223        mutex_unlock(&slab_mutex);
 224        put_online_cpus();
 225
 226        if (err) {
 227
 228                if (flags & SLAB_PANIC)
 229                        panic("kmem_cache_create: Failed to create slab '%s'. Error %d\n",
 230                                name, err);
 231                else {
 232                        printk(KERN_WARNING "kmem_cache_create(%s) failed with error %d",
 233                                name, err);
 234                        dump_stack();
 235                }
 236
 237                return NULL;
 238        }
 239
 240        return s;
 241}
 242
 243struct kmem_cache *
 244kmem_cache_create(const char *name, size_t size, size_t align,
 245                  unsigned long flags, void (*ctor)(void *))
 246{
 247        return kmem_cache_create_memcg(NULL, name, size, align, flags, ctor, NULL);
 248}
 249EXPORT_SYMBOL(kmem_cache_create);
 250
 251void kmem_cache_destroy(struct kmem_cache *s)
 252{
 253        /* Destroy all the children caches if we aren't a memcg cache */
 254        kmem_cache_destroy_memcg_children(s);
 255
 256        get_online_cpus();
 257        mutex_lock(&slab_mutex);
 258        s->refcount--;
 259        if (!s->refcount) {
 260                list_del(&s->list);
 261
 262                if (!__kmem_cache_shutdown(s)) {
 263                        mutex_unlock(&slab_mutex);
 264                        if (s->flags & SLAB_DESTROY_BY_RCU)
 265                                rcu_barrier();
 266
 267                        memcg_release_cache(s);
 268                        kfree(s->name);
 269                        kmem_cache_free(kmem_cache, s);
 270                } else {
 271                        list_add(&s->list, &slab_caches);
 272                        mutex_unlock(&slab_mutex);
 273                        printk(KERN_ERR "kmem_cache_destroy %s: Slab cache still has objects\n",
 274                                s->name);
 275                        dump_stack();
 276                }
 277        } else {
 278                mutex_unlock(&slab_mutex);
 279        }
 280        put_online_cpus();
 281}
 282EXPORT_SYMBOL(kmem_cache_destroy);
 283
 284int slab_is_available(void)
 285{
 286        return slab_state >= UP;
 287}
 288
 289#ifndef CONFIG_SLOB
 290/* Create a cache during boot when no slab services are available yet */
 291void __init create_boot_cache(struct kmem_cache *s, const char *name, size_t size,
 292                unsigned long flags)
 293{
 294        int err;
 295
 296        s->name = name;
 297        s->size = s->object_size = size;
 298        s->align = calculate_alignment(flags, ARCH_KMALLOC_MINALIGN, size);
 299        err = __kmem_cache_create(s, flags);
 300
 301        if (err)
 302                panic("Creation of kmalloc slab %s size=%zd failed. Reason %d\n",
 303                                        name, size, err);
 304
 305        s->refcount = -1;       /* Exempt from merging for now */
 306}
 307
 308struct kmem_cache *__init create_kmalloc_cache(const char *name, size_t size,
 309                                unsigned long flags)
 310{
 311        struct kmem_cache *s = kmem_cache_zalloc(kmem_cache, GFP_NOWAIT);
 312
 313        if (!s)
 314                panic("Out of memory when creating slab %s\n", name);
 315
 316        create_boot_cache(s, name, size, flags);
 317        list_add(&s->list, &slab_caches);
 318        s->refcount = 1;
 319        return s;
 320}
 321
 322#endif /* !CONFIG_SLOB */
 323
 324
 325#ifdef CONFIG_SLABINFO
 326void print_slabinfo_header(struct seq_file *m)
 327{
 328        /*
 329         * Output format version, so at least we can change it
 330         * without _too_ many complaints.
 331         */
 332#ifdef CONFIG_DEBUG_SLAB
 333        seq_puts(m, "slabinfo - version: 2.1 (statistics)\n");
 334#else
 335        seq_puts(m, "slabinfo - version: 2.1\n");
 336#endif
 337        seq_puts(m, "# name            <active_objs> <num_objs> <objsize> "
 338                 "<objperslab> <pagesperslab>");
 339        seq_puts(m, " : tunables <limit> <batchcount> <sharedfactor>");
 340        seq_puts(m, " : slabdata <active_slabs> <num_slabs> <sharedavail>");
 341#ifdef CONFIG_DEBUG_SLAB
 342        seq_puts(m, " : globalstat <listallocs> <maxobjs> <grown> <reaped> "
 343                 "<error> <maxfreeable> <nodeallocs> <remotefrees> <alienoverflow>");
 344        seq_puts(m, " : cpustat <allochit> <allocmiss> <freehit> <freemiss>");
 345#endif
 346        seq_putc(m, '\n');
 347}
 348
 349static void *s_start(struct seq_file *m, loff_t *pos)
 350{
 351        loff_t n = *pos;
 352
 353        mutex_lock(&slab_mutex);
 354        if (!n)
 355                print_slabinfo_header(m);
 356
 357        return seq_list_start(&slab_caches, *pos);
 358}
 359
 360static void *s_next(struct seq_file *m, void *p, loff_t *pos)
 361{
 362        return seq_list_next(p, &slab_caches, pos);
 363}
 364
 365static void s_stop(struct seq_file *m, void *p)
 366{
 367        mutex_unlock(&slab_mutex);
 368}
 369
 370static void
 371memcg_accumulate_slabinfo(struct kmem_cache *s, struct slabinfo *info)
 372{
 373        struct kmem_cache *c;
 374        struct slabinfo sinfo;
 375        int i;
 376
 377        if (!is_root_cache(s))
 378                return;
 379
 380        for_each_memcg_cache_index(i) {
 381                c = cache_from_memcg(s, i);
 382                if (!c)
 383                        continue;
 384
 385                memset(&sinfo, 0, sizeof(sinfo));
 386                get_slabinfo(c, &sinfo);
 387
 388                info->active_slabs += sinfo.active_slabs;
 389                info->num_slabs += sinfo.num_slabs;
 390                info->shared_avail += sinfo.shared_avail;
 391                info->active_objs += sinfo.active_objs;
 392                info->num_objs += sinfo.num_objs;
 393        }
 394}
 395
 396int cache_show(struct kmem_cache *s, struct seq_file *m)
 397{
 398        struct slabinfo sinfo;
 399
 400        memset(&sinfo, 0, sizeof(sinfo));
 401        get_slabinfo(s, &sinfo);
 402
 403        memcg_accumulate_slabinfo(s, &sinfo);
 404
 405        seq_printf(m, "%-17s %6lu %6lu %6u %4u %4d",
 406                   cache_name(s), sinfo.active_objs, sinfo.num_objs, s->size,
 407                   sinfo.objects_per_slab, (1 << sinfo.cache_order));
 408
 409        seq_printf(m, " : tunables %4u %4u %4u",
 410                   sinfo.limit, sinfo.batchcount, sinfo.shared);
 411        seq_printf(m, " : slabdata %6lu %6lu %6lu",
 412                   sinfo.active_slabs, sinfo.num_slabs, sinfo.shared_avail);
 413        slabinfo_show_stats(m, s);
 414        seq_putc(m, '\n');
 415        return 0;
 416}
 417
 418static int s_show(struct seq_file *m, void *p)
 419{
 420        struct kmem_cache *s = list_entry(p, struct kmem_cache, list);
 421
 422        if (!is_root_cache(s))
 423                return 0;
 424        return cache_show(s, m);
 425}
 426
 427/*
 428 * slabinfo_op - iterator that generates /proc/slabinfo
 429 *
 430 * Output layout:
 431 * cache-name
 432 * num-active-objs
 433 * total-objs
 434 * object size
 435 * num-active-slabs
 436 * total-slabs
 437 * num-pages-per-slab
 438 * + further values on SMP and with statistics enabled
 439 */
 440static const struct seq_operations slabinfo_op = {
 441        .start = s_start,
 442        .next = s_next,
 443        .stop = s_stop,
 444        .show = s_show,
 445};
 446
 447static int slabinfo_open(struct inode *inode, struct file *file)
 448{
 449        return seq_open(file, &slabinfo_op);
 450}
 451
 452static const struct file_operations proc_slabinfo_operations = {
 453        .open           = slabinfo_open,
 454        .read           = seq_read,
 455        .write          = slabinfo_write,
 456        .llseek         = seq_lseek,
 457        .release        = seq_release,
 458};
 459
 460static int __init slab_proc_init(void)
 461{
 462        proc_create("slabinfo", S_IRUSR, NULL, &proc_slabinfo_operations);
 463        return 0;
 464}
 465module_init(slab_proc_init);
 466#endif /* CONFIG_SLABINFO */
 467
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.