1 #ifndef MM_SLAB_H 2 #define MM_SLAB_H 3 /* 4 * Internal slab definitions 5 */ 6 7 /* 8 * State of the slab allocator. 9 * 10 * This is used to describe the states of the allocator during bootup. 11 * Allocators use this to gradually bootstrap themselves. Most allocators 12 * have the problem that the structures used for managing slab caches are 13 * allocated from slab caches themselves. 14 */ 15 enum slab_state { 16 DOWN, /* No slab functionality yet */ 17 PARTIAL, /* SLUB: kmem_cache_node available */ 18 PARTIAL_ARRAYCACHE, /* SLAB: kmalloc size for arraycache available */ 19 PARTIAL_L3, /* SLAB: kmalloc size for l3 struct available */ 20 UP, /* Slab caches usable but not all extras yet */ 21 FULL /* Everything is working */ 22 }; 23 24 extern enum slab_state slab_state; 25 26 /* The slab cache mutex protects the management structures during changes */ 27 extern struct mutex slab_mutex; 28 29 /* The list of all slab caches on the system */ 30 extern struct list_head slab_caches; 31 32 /* The slab cache that manages slab cache information */ 33 extern struct kmem_cache *kmem_cache; 34 35 /* Functions provided by the slab allocators */ 36 extern int __kmem_cache_create(struct kmem_cache *, unsigned long flags); 37 38 #ifdef CONFIG_SLUB 39 struct kmem_cache *__kmem_cache_alias(const char *name, size_t size, 40 size_t align, unsigned long flags, void (*ctor)(void *)); 41 #else 42 static inline struct kmem_cache *__kmem_cache_alias(const char *name, size_t size, 43 size_t align, unsigned long flags, void (*ctor)(void *)) 44 { return NULL; } 45 #endif 46 47 48 int __kmem_cache_shutdown(struct kmem_cache *); 49 50 #endif 51