summaryrefslogtreecommitdiffstats
path: root/mm/slab.h
diff options
context:
space:
mode:
Diffstat (limited to 'mm/slab.h')
-rw-r--r--mm/slab.h41
1 files changed, 23 insertions, 18 deletions
diff --git a/mm/slab.h b/mm/slab.h
index 86d7c7d860f9..ad657ffa44e5 100644
--- a/mm/slab.h
+++ b/mm/slab.h
@@ -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
82unsigned long calculate_alignment(unsigned long flags, 81unsigned 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 */
87void setup_kmalloc_cache_index_table(void); 86void setup_kmalloc_cache_index_table(void);
88void create_kmalloc_caches(unsigned long); 87void 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 */
91struct kmem_cache *kmalloc_slab(size_t, gfp_t); 90struct 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 */
96extern int __kmem_cache_create(struct kmem_cache *, unsigned long flags); 95int __kmem_cache_create(struct kmem_cache *, slab_flags_t flags);
97 96
98extern struct kmem_cache *create_kmalloc_cache(const char *name, size_t size, 97extern struct kmem_cache *create_kmalloc_cache(const char *name, size_t size,
99 unsigned long flags); 98 slab_flags_t flags);
100extern void create_boot_cache(struct kmem_cache *, const char *name, 99extern 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
103int slab_unmergeable(struct kmem_cache *s); 102int slab_unmergeable(struct kmem_cache *s);
104struct kmem_cache *find_mergeable(size_t size, size_t align, 103struct 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
107struct kmem_cache * 106struct 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
111unsigned long kmem_cache_flags(unsigned long object_size, 110slab_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
115static inline struct kmem_cache * 114static 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
120static inline unsigned long kmem_cache_flags(unsigned long object_size, 119static 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
170int __kmem_cache_shutdown(struct kmem_cache *); 168int __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);
506void memcg_slab_stop(struct seq_file *m, void *p); 503void memcg_slab_stop(struct seq_file *m, void *p);
507int memcg_slab_show(struct seq_file *m, void *p); 504int memcg_slab_show(struct seq_file *m, void *p);
508 505
506#if defined(CONFIG_SLAB) || defined(CONFIG_SLUB_DEBUG)
507void dump_unreclaimable_slab(void);
508#else
509static inline void dump_unreclaimable_slab(void)
510{
511}
512#endif
513
509void ___cache_free(struct kmem_cache *cache, void *x, unsigned long addr); 514void ___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