1 #ifndef _LINUX_SLAB_DEF_H
2 #define _LINUX_SLAB_DEF_H
5 * Definitions unique to the original Linux SLAB allocator.
7 * What we provide here is a way to optimize the frequent kmalloc
8 * calls in the kernel by selecting the appropriate general cache
9 * if kmalloc was called with a size that can be established at
13 #include <linux/init.h>
14 #include <asm/page.h> /* kmalloc_sizes.h needs PAGE_SIZE */
15 #include <asm/cache.h> /* kmalloc_sizes.h needs L1_CACHE_BYTES */
16 #include <linux/compiler.h>
18 /* Size description struct for general caches. */
21 struct kmem_cache *cs_cachep;
22 #ifdef CONFIG_ZONE_DMA
23 struct kmem_cache *cs_dmacachep;
26 extern struct cache_sizes malloc_sizes[];
28 void *kmem_cache_alloc(struct kmem_cache *, gfp_t);
29 void *__kmalloc(size_t size, gfp_t flags);
31 static inline void *kmalloc(size_t size, gfp_t flags)
33 if (__builtin_constant_p(size)) {
40 #include "kmalloc_sizes.h"
43 extern void __you_cannot_kmalloc_that_much(void);
44 __you_cannot_kmalloc_that_much();
47 #ifdef CONFIG_ZONE_DMA
49 return kmem_cache_alloc(malloc_sizes[i].cs_dmacachep,
52 return kmem_cache_alloc(malloc_sizes[i].cs_cachep, flags);
54 return __kmalloc(size, flags);
57 static inline void *kzalloc(size_t size, gfp_t flags)
59 if (__builtin_constant_p(size)) {
66 #include "kmalloc_sizes.h"
69 extern void __you_cannot_kzalloc_that_much(void);
70 __you_cannot_kzalloc_that_much();
73 #ifdef CONFIG_ZONE_DMA
75 return kmem_cache_zalloc(malloc_sizes[i].cs_dmacachep,
78 return kmem_cache_zalloc(malloc_sizes[i].cs_cachep, flags);
80 return __kzalloc(size, flags);
84 extern void *__kmalloc_node(size_t size, gfp_t flags, int node);
85 extern void *kmem_cache_alloc_node(struct kmem_cache *, gfp_t flags, int node);
87 static inline void *kmalloc_node(size_t size, gfp_t flags, int node)
89 if (__builtin_constant_p(size)) {
96 #include "kmalloc_sizes.h"
99 extern void __you_cannot_kmalloc_that_much(void);
100 __you_cannot_kmalloc_that_much();
103 #ifdef CONFIG_ZONE_DMA
105 return kmem_cache_alloc_node(malloc_sizes[i].cs_dmacachep,
108 return kmem_cache_alloc_node(malloc_sizes[i].cs_cachep,
111 return __kmalloc_node(size, flags, node);
114 #endif /* CONFIG_NUMA */
116 extern const struct seq_operations slabinfo_op;
117 ssize_t slabinfo_write(struct file *, const char __user *, size_t, loff_t *);
119 #endif /* _LINUX_SLAB_DEF_H */