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