root/include/linux/slab_def.h

/* [<][>][^][v][top][bottom][index][help] */
#ifndef _LINUX_SLAB_DEF_H
#define _LINUX_SLAB_DEF_H

#include <linux/reciprocal_div.h>

/*
 * Definitions unique to the original Linux SLAB allocator.
 */

struct kmem_cache {
        struct array_cache __percpu *cpu_cache;

/* 1) Cache tunables. Protected by slab_mutex */
        unsigned int batchcount;
        unsigned int limit;
        unsigned int shared;

        unsigned int size;
        struct reciprocal_value reciprocal_buffer_size;
/* 2) touched by every alloc & free from the backend */

        unsigned int flags;             /* constant flags */
        unsigned int num;               /* # of objs per slab */

/* 3) cache_grow/shrink */
        /* order of pgs per slab (2^n) */
        unsigned int gfporder;

        /* force GFP flags, e.g. GFP_DMA */
        gfp_t allocflags;

        size_t colour;                  /* cache colouring range */
        unsigned int colour_off;        /* colour offset */
        struct kmem_cache *freelist_cache;
        unsigned int freelist_size;

        /* constructor func */
        void (*ctor)(void *obj);

/* 4) cache creation/removal */
        const char *name;
        struct list_head list;
        int refcount;
        int object_size;
        int align;

/* 5) statistics */
#ifdef CONFIG_DEBUG_SLAB
        unsigned long num_active;
        unsigned long num_allocations;
        unsigned long high_mark;
        unsigned long grown;
        unsigned long reaped;
        unsigned long errors;
        unsigned long max_freeable;
        unsigned long node_allocs;
        unsigned long node_frees;
        unsigned long node_overflow;
        atomic_t allochit;
        atomic_t allocmiss;
        atomic_t freehit;
        atomic_t freemiss;

        /*
         * If debugging is enabled, then the allocator can add additional
         * fields and/or padding to every object. size contains the total
         * object size including these internal fields, the following two
         * variables contain the offset to the user object and its size.
         */
        int obj_offset;
#endif /* CONFIG_DEBUG_SLAB */
#ifdef CONFIG_MEMCG_KMEM
        struct memcg_cache_params *memcg_params;
#endif

        struct kmem_cache_node *node[MAX_NUMNODES];
};

#endif  /* _LINUX_SLAB_DEF_H */

/* [<][>][^][v][top][bottom][index][help] */