diff options
Diffstat (limited to 'mm/slab.h')
-rw-r--r-- | mm/slab.h | 41 |
1 files changed, 23 insertions, 18 deletions
@@ -21,7 +21,7 @@ struct kmem_cache { | |||
21 | unsigned int object_size;/* The original size of the object */ | 21 | unsigned int object_size;/* The original size of the object */ |
22 | unsigned int size; /* The aligned/padded/added on size */ | 22 | unsigned int size; /* The aligned/padded/added on size */ |
23 | unsigned int align; /* Alignment as calculated */ | 23 | unsigned int align; /* Alignment as calculated */ |
24 | unsigned long flags; /* Active flags on the slab */ | 24 | slab_flags_t flags; /* Active flags on the slab */ |
25 | const char *name; /* Slab name for sysfs */ | 25 | const char *name; /* Slab name for sysfs */ |
26 | int refcount; /* Use counter */ | 26 | int refcount; /* Use counter */ |
27 | void (*ctor)(void *); /* Called on object slot creation */ | 27 | void (*ctor)(void *); /* Called on object slot creation */ |
@@ -40,7 +40,6 @@ struct kmem_cache { | |||
40 | 40 | ||
41 | #include <linux/memcontrol.h> | 41 | #include <linux/memcontrol.h> |
42 | #include <linux/fault-inject.h> | 42 | #include <linux/fault-inject.h> |
43 | #include <linux/kmemcheck.h> | ||
44 | #include <linux/kasan.h> | 43 | #include <linux/kasan.h> |
45 | #include <linux/kmemleak.h> | 44 | #include <linux/kmemleak.h> |
46 | #include <linux/random.h> | 45 | #include <linux/random.h> |
@@ -79,13 +78,13 @@ extern const struct kmalloc_info_struct { | |||
79 | unsigned long size; | 78 | unsigned long size; |
80 | } kmalloc_info[]; | 79 | } kmalloc_info[]; |
81 | 80 | ||
82 | unsigned long calculate_alignment(unsigned long flags, | 81 | unsigned long calculate_alignment(slab_flags_t flags, |
83 | unsigned long align, unsigned long size); | 82 | unsigned long align, unsigned long size); |
84 | 83 | ||
85 | #ifndef CONFIG_SLOB | 84 | #ifndef CONFIG_SLOB |
86 | /* Kmalloc array related functions */ | 85 | /* Kmalloc array related functions */ |
87 | void setup_kmalloc_cache_index_table(void); | 86 | void setup_kmalloc_cache_index_table(void); |
88 | void create_kmalloc_caches(unsigned long); | 87 | void create_kmalloc_caches(slab_flags_t); |
89 | 88 | ||
90 | /* Find the kmalloc slab corresponding for a certain size */ | 89 | /* Find the kmalloc slab corresponding for a certain size */ |
91 | struct kmem_cache *kmalloc_slab(size_t, gfp_t); | 90 | struct kmem_cache *kmalloc_slab(size_t, gfp_t); |
@@ -93,32 +92,32 @@ struct kmem_cache *kmalloc_slab(size_t, gfp_t); | |||
93 | 92 | ||
94 | 93 | ||
95 | /* Functions provided by the slab allocators */ | 94 | /* Functions provided by the slab allocators */ |
96 | extern int __kmem_cache_create(struct kmem_cache *, unsigned long flags); | 95 | int __kmem_cache_create(struct kmem_cache *, slab_flags_t flags); |
97 | 96 | ||
98 | extern struct kmem_cache *create_kmalloc_cache(const char *name, size_t size, | 97 | extern struct kmem_cache *create_kmalloc_cache(const char *name, size_t size, |
99 | unsigned long flags); | 98 | slab_flags_t flags); |
100 | extern void create_boot_cache(struct kmem_cache *, const char *name, | 99 | extern void create_boot_cache(struct kmem_cache *, const char *name, |
101 | size_t size, unsigned long flags); | 100 | size_t size, slab_flags_t flags); |
102 | 101 | ||
103 | int slab_unmergeable(struct kmem_cache *s); | 102 | int slab_unmergeable(struct kmem_cache *s); |
104 | struct kmem_cache *find_mergeable(size_t size, size_t align, | 103 | struct kmem_cache *find_mergeable(size_t size, size_t align, |
105 | unsigned long flags, const char *name, void (*ctor)(void *)); | 104 | slab_flags_t flags, const char *name, void (*ctor)(void *)); |
106 | #ifndef CONFIG_SLOB | 105 | #ifndef CONFIG_SLOB |
107 | struct kmem_cache * | 106 | struct kmem_cache * |
108 | __kmem_cache_alias(const char *name, size_t size, size_t align, | 107 | __kmem_cache_alias(const char *name, size_t size, size_t align, |
109 | unsigned long flags, void (*ctor)(void *)); | 108 | slab_flags_t flags, void (*ctor)(void *)); |
110 | 109 | ||
111 | unsigned long kmem_cache_flags(unsigned long object_size, | 110 | slab_flags_t kmem_cache_flags(unsigned long object_size, |
112 | unsigned long flags, const char *name, | 111 | slab_flags_t flags, const char *name, |
113 | void (*ctor)(void *)); | 112 | void (*ctor)(void *)); |
114 | #else | 113 | #else |
115 | static inline struct kmem_cache * | 114 | static inline struct kmem_cache * |
116 | __kmem_cache_alias(const char *name, size_t size, size_t align, | 115 | __kmem_cache_alias(const char *name, size_t size, size_t align, |
117 | unsigned long flags, void (*ctor)(void *)) | 116 | slab_flags_t flags, void (*ctor)(void *)) |
118 | { return NULL; } | 117 | { return NULL; } |
119 | 118 | ||
120 | static inline unsigned long kmem_cache_flags(unsigned long object_size, | 119 | static inline slab_flags_t kmem_cache_flags(unsigned long object_size, |
121 | unsigned long flags, const char *name, | 120 | slab_flags_t flags, const char *name, |
122 | void (*ctor)(void *)) | 121 | void (*ctor)(void *)) |
123 | { | 122 | { |
124 | return flags; | 123 | return flags; |
@@ -142,10 +141,10 @@ static inline unsigned long kmem_cache_flags(unsigned long object_size, | |||
142 | #if defined(CONFIG_SLAB) | 141 | #if defined(CONFIG_SLAB) |
143 | #define SLAB_CACHE_FLAGS (SLAB_MEM_SPREAD | SLAB_NOLEAKTRACE | \ | 142 | #define SLAB_CACHE_FLAGS (SLAB_MEM_SPREAD | SLAB_NOLEAKTRACE | \ |
144 | SLAB_RECLAIM_ACCOUNT | SLAB_TEMPORARY | \ | 143 | SLAB_RECLAIM_ACCOUNT | SLAB_TEMPORARY | \ |
145 | SLAB_NOTRACK | SLAB_ACCOUNT) | 144 | SLAB_ACCOUNT) |
146 | #elif defined(CONFIG_SLUB) | 145 | #elif defined(CONFIG_SLUB) |
147 | #define SLAB_CACHE_FLAGS (SLAB_NOLEAKTRACE | SLAB_RECLAIM_ACCOUNT | \ | 146 | #define SLAB_CACHE_FLAGS (SLAB_NOLEAKTRACE | SLAB_RECLAIM_ACCOUNT | \ |
148 | SLAB_TEMPORARY | SLAB_NOTRACK | SLAB_ACCOUNT) | 147 | SLAB_TEMPORARY | SLAB_ACCOUNT) |
149 | #else | 148 | #else |
150 | #define SLAB_CACHE_FLAGS (0) | 149 | #define SLAB_CACHE_FLAGS (0) |
151 | #endif | 150 | #endif |
@@ -164,7 +163,6 @@ static inline unsigned long kmem_cache_flags(unsigned long object_size, | |||
164 | SLAB_NOLEAKTRACE | \ | 163 | SLAB_NOLEAKTRACE | \ |
165 | SLAB_RECLAIM_ACCOUNT | \ | 164 | SLAB_RECLAIM_ACCOUNT | \ |
166 | SLAB_TEMPORARY | \ | 165 | SLAB_TEMPORARY | \ |
167 | SLAB_NOTRACK | \ | ||
168 | SLAB_ACCOUNT) | 166 | SLAB_ACCOUNT) |
169 | 167 | ||
170 | int __kmem_cache_shutdown(struct kmem_cache *); | 168 | int __kmem_cache_shutdown(struct kmem_cache *); |
@@ -439,7 +437,6 @@ static inline void slab_post_alloc_hook(struct kmem_cache *s, gfp_t flags, | |||
439 | for (i = 0; i < size; i++) { | 437 | for (i = 0; i < size; i++) { |
440 | void *object = p[i]; | 438 | void *object = p[i]; |
441 | 439 | ||
442 | kmemcheck_slab_alloc(s, flags, object, slab_ksize(s)); | ||
443 | kmemleak_alloc_recursive(object, s->object_size, 1, | 440 | kmemleak_alloc_recursive(object, s->object_size, 1, |
444 | s->flags, flags); | 441 | s->flags, flags); |
445 | kasan_slab_alloc(s, object, flags); | 442 | kasan_slab_alloc(s, object, flags); |
@@ -506,6 +503,14 @@ void *memcg_slab_next(struct seq_file *m, void *p, loff_t *pos); | |||
506 | void memcg_slab_stop(struct seq_file *m, void *p); | 503 | void memcg_slab_stop(struct seq_file *m, void *p); |
507 | int memcg_slab_show(struct seq_file *m, void *p); | 504 | int memcg_slab_show(struct seq_file *m, void *p); |
508 | 505 | ||
506 | #if defined(CONFIG_SLAB) || defined(CONFIG_SLUB_DEBUG) | ||
507 | void dump_unreclaimable_slab(void); | ||
508 | #else | ||
509 | static inline void dump_unreclaimable_slab(void) | ||
510 | { | ||
511 | } | ||
512 | #endif | ||
513 | |||
509 | void ___cache_free(struct kmem_cache *cache, void *x, unsigned long addr); | 514 | void ___cache_free(struct kmem_cache *cache, void *x, unsigned long addr); |
510 | 515 | ||
511 | #ifdef CONFIG_SLAB_FREELIST_RANDOM | 516 | #ifdef CONFIG_SLAB_FREELIST_RANDOM |