cregit-Linux how code gets into the kernel

Release 4.7 include/linux/slab_def.h

Directory: include/linux
#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;
#ifdef CONFIG_DEBUG_SLAB_LEAK
	
atomic_t store_user_clean;
#endif

	/*
         * 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
	
struct memcg_cache_params memcg_params;
#endif
#ifdef CONFIG_KASAN
	
struct kasan_cache kasan_info;
#endif

#ifdef CONFIG_SLAB_FREELIST_RANDOM
	
void *random_seq;
#endif

	
struct kmem_cache_node *node[MAX_NUMNODES];
};


static inline void *nearest_obj(struct kmem_cache *cache, struct page *page, void *x) { void *object = x - (x - page->s_mem) % cache->size; void *last_object = page->s_mem + (cache->num - 1) * cache->size; if (unlikely(object > last_object)) return last_object; else return object; }

Contributors

PersonTokensPropCommitsCommitProp
alexander potapenkoalexander potapenko76100.00%1100.00%
Total76100.00%1100.00%

#endif /* _LINUX_SLAB_DEF_H */

Overall Contributors

PersonTokensPropCommitsCommitProp
pekka j enbergpekka j enberg14247.81%15.56%
alexander potapenkoalexander potapenko8528.62%15.56%
christoph lameterchristoph lameter258.42%633.33%
joonsoo kimjoonsoo kim165.39%316.67%
thomas garnierthomas garnier93.03%15.56%
glauber costaglauber costa93.03%211.11%
hannes frederic sowahannes frederic sowa51.68%15.56%
eric dumazeteric dumazet41.35%15.56%
fam zhengfam zheng10.34%15.56%
johannes weinerjohannes weiner10.34%15.56%
Total297100.00%18100.00%
Directory: include/linux
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.
{% endraw %}