diff options
Diffstat (limited to 'include/linux/slab.h')
| -rw-r--r-- | include/linux/slab.h | 33 |
1 files changed, 26 insertions, 7 deletions
diff --git a/include/linux/slab.h b/include/linux/slab.h index 45ad55b70d1c..a96fd9310d55 100644 --- a/include/linux/slab.h +++ b/include/linux/slab.h | |||
| @@ -60,14 +60,13 @@ extern void __init kmem_cache_init(void); | |||
| 60 | extern kmem_cache_t *kmem_cache_create(const char *, size_t, size_t, unsigned long, | 60 | extern kmem_cache_t *kmem_cache_create(const char *, size_t, size_t, unsigned long, |
| 61 | void (*)(void *, kmem_cache_t *, unsigned long), | 61 | void (*)(void *, kmem_cache_t *, unsigned long), |
| 62 | void (*)(void *, kmem_cache_t *, unsigned long)); | 62 | void (*)(void *, kmem_cache_t *, unsigned long)); |
| 63 | extern int kmem_cache_destroy(kmem_cache_t *); | 63 | extern void kmem_cache_destroy(kmem_cache_t *); |
| 64 | extern int kmem_cache_shrink(kmem_cache_t *); | 64 | extern int kmem_cache_shrink(kmem_cache_t *); |
| 65 | extern void *kmem_cache_alloc(kmem_cache_t *, gfp_t); | 65 | extern void *kmem_cache_alloc(kmem_cache_t *, gfp_t); |
| 66 | extern void *kmem_cache_zalloc(struct kmem_cache *, gfp_t); | 66 | extern void *kmem_cache_zalloc(struct kmem_cache *, gfp_t); |
| 67 | extern void kmem_cache_free(kmem_cache_t *, void *); | 67 | extern void kmem_cache_free(kmem_cache_t *, void *); |
| 68 | extern unsigned int kmem_cache_size(kmem_cache_t *); | 68 | extern unsigned int kmem_cache_size(kmem_cache_t *); |
| 69 | extern const char *kmem_cache_name(kmem_cache_t *); | 69 | extern const char *kmem_cache_name(kmem_cache_t *); |
| 70 | extern kmem_cache_t *kmem_find_general_cachep(size_t size, gfp_t gfpflags); | ||
| 71 | 70 | ||
| 72 | /* Size description struct for general caches. */ | 71 | /* Size description struct for general caches. */ |
| 73 | struct cache_sizes { | 72 | struct cache_sizes { |
| @@ -203,7 +202,30 @@ extern int slab_is_available(void); | |||
| 203 | 202 | ||
| 204 | #ifdef CONFIG_NUMA | 203 | #ifdef CONFIG_NUMA |
| 205 | extern void *kmem_cache_alloc_node(kmem_cache_t *, gfp_t flags, int node); | 204 | extern void *kmem_cache_alloc_node(kmem_cache_t *, gfp_t flags, int node); |
| 206 | extern void *kmalloc_node(size_t size, gfp_t flags, int node); | 205 | extern void *__kmalloc_node(size_t size, gfp_t flags, int node); |
| 206 | |||
| 207 | static inline void *kmalloc_node(size_t size, gfp_t flags, int node) | ||
| 208 | { | ||
| 209 | if (__builtin_constant_p(size)) { | ||
| 210 | int i = 0; | ||
| 211 | #define CACHE(x) \ | ||
| 212 | if (size <= x) \ | ||
| 213 | goto found; \ | ||
| 214 | else \ | ||
| 215 | i++; | ||
| 216 | #include "kmalloc_sizes.h" | ||
| 217 | #undef CACHE | ||
| 218 | { | ||
| 219 | extern void __you_cannot_kmalloc_that_much(void); | ||
| 220 | __you_cannot_kmalloc_that_much(); | ||
| 221 | } | ||
| 222 | found: | ||
| 223 | return kmem_cache_alloc_node((flags & GFP_DMA) ? | ||
| 224 | malloc_sizes[i].cs_dmacachep : | ||
| 225 | malloc_sizes[i].cs_cachep, flags, node); | ||
| 226 | } | ||
| 227 | return __kmalloc_node(size, flags, node); | ||
| 228 | } | ||
| 207 | #else | 229 | #else |
| 208 | static inline void *kmem_cache_alloc_node(kmem_cache_t *cachep, gfp_t flags, int node) | 230 | static inline void *kmem_cache_alloc_node(kmem_cache_t *cachep, gfp_t flags, int node) |
| 209 | { | 231 | { |
| @@ -223,12 +245,11 @@ extern int FASTCALL(kmem_ptr_validate(kmem_cache_t *cachep, void *ptr)); | |||
| 223 | /* SLOB allocator routines */ | 245 | /* SLOB allocator routines */ |
| 224 | 246 | ||
| 225 | void kmem_cache_init(void); | 247 | void kmem_cache_init(void); |
| 226 | struct kmem_cache *kmem_find_general_cachep(size_t, gfp_t gfpflags); | ||
| 227 | struct kmem_cache *kmem_cache_create(const char *c, size_t, size_t, | 248 | struct kmem_cache *kmem_cache_create(const char *c, size_t, size_t, |
| 228 | unsigned long, | 249 | unsigned long, |
| 229 | void (*)(void *, struct kmem_cache *, unsigned long), | 250 | void (*)(void *, struct kmem_cache *, unsigned long), |
| 230 | void (*)(void *, struct kmem_cache *, unsigned long)); | 251 | void (*)(void *, struct kmem_cache *, unsigned long)); |
| 231 | int kmem_cache_destroy(struct kmem_cache *c); | 252 | void kmem_cache_destroy(struct kmem_cache *c); |
| 232 | void *kmem_cache_alloc(struct kmem_cache *c, gfp_t flags); | 253 | void *kmem_cache_alloc(struct kmem_cache *c, gfp_t flags); |
| 233 | void *kmem_cache_zalloc(struct kmem_cache *, gfp_t); | 254 | void *kmem_cache_zalloc(struct kmem_cache *, gfp_t); |
| 234 | void kmem_cache_free(struct kmem_cache *c, void *b); | 255 | void kmem_cache_free(struct kmem_cache *c, void *b); |
| @@ -263,8 +284,6 @@ extern kmem_cache_t *fs_cachep; | |||
| 263 | extern kmem_cache_t *sighand_cachep; | 284 | extern kmem_cache_t *sighand_cachep; |
| 264 | extern kmem_cache_t *bio_cachep; | 285 | extern kmem_cache_t *bio_cachep; |
| 265 | 286 | ||
| 266 | extern atomic_t slab_reclaim_pages; | ||
| 267 | |||
| 268 | #endif /* __KERNEL__ */ | 287 | #endif /* __KERNEL__ */ |
| 269 | 288 | ||
| 270 | #endif /* _LINUX_SLAB_H */ | 289 | #endif /* _LINUX_SLAB_H */ |
