xref: /linux/mm/slab.h (revision 97d06609158e61f6bdf538c4a6788e2de492236f)
1*97d06609SChristoph Lameter #ifndef MM_SLAB_H
2*97d06609SChristoph Lameter #define MM_SLAB_H
3*97d06609SChristoph Lameter /*
4*97d06609SChristoph Lameter  * Internal slab definitions
5*97d06609SChristoph Lameter  */
6*97d06609SChristoph Lameter 
7*97d06609SChristoph Lameter /*
8*97d06609SChristoph Lameter  * State of the slab allocator.
9*97d06609SChristoph Lameter  *
10*97d06609SChristoph Lameter  * This is used to describe the states of the allocator during bootup.
11*97d06609SChristoph Lameter  * Allocators use this to gradually bootstrap themselves. Most allocators
12*97d06609SChristoph Lameter  * have the problem that the structures used for managing slab caches are
13*97d06609SChristoph Lameter  * allocated from slab caches themselves.
14*97d06609SChristoph Lameter  */
15*97d06609SChristoph Lameter enum slab_state {
16*97d06609SChristoph Lameter 	DOWN,			/* No slab functionality yet */
17*97d06609SChristoph Lameter 	PARTIAL,		/* SLUB: kmem_cache_node available */
18*97d06609SChristoph Lameter 	PARTIAL_ARRAYCACHE,	/* SLAB: kmalloc size for arraycache available */
19*97d06609SChristoph Lameter 	PARTIAL_L3,		/* SLAB: kmalloc size for l3 struct available */
20*97d06609SChristoph Lameter 	UP,			/* Slab caches usable but not all extras yet */
21*97d06609SChristoph Lameter 	FULL			/* Everything is working */
22*97d06609SChristoph Lameter };
23*97d06609SChristoph Lameter 
24*97d06609SChristoph Lameter extern enum slab_state slab_state;
25*97d06609SChristoph Lameter 
26*97d06609SChristoph Lameter struct kmem_cache *__kmem_cache_create(const char *name, size_t size,
27*97d06609SChristoph Lameter 	size_t align, unsigned long flags, void (*ctor)(void *));
28*97d06609SChristoph Lameter 
29*97d06609SChristoph Lameter #endif
30