aboutsummaryrefslogtreecommitdiffstats
path: root/mm
diff options
context:
space:
mode:
authorIngo Molnar <mingo@elte.hu>2009-07-03 09:44:11 -0400
committerThomas Gleixner <tglx@linutronix.de>2009-07-24 11:45:46 -0400
commita20e0cb87d49f65bea34026c7dfe364c035a1123 (patch)
tree6f259b428faed9cbbfc89be795bff72411cd807e /mm
parent9566018270e0c6cee0388e1a577ae8b6f15f4e8d (diff)
mm: Restructure slab to use percpu locked data structures
Instead of relying on preemption disabled rt protects the per cpu data structures with per cpu locks. This patch contains fixes from Andi Kleen <ak@suse.de> Peter Zijlstra <a.p.zijlstra@chello.nl> Thomas Gleixner <tglx@linutronix.de> Signed-off-by: Ingo Molnar <mingo@elte.hu> Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Diffstat (limited to 'mm')
-rw-r--r--mm/slab.c537
1 files changed, 376 insertions, 161 deletions
diff --git a/mm/slab.c b/mm/slab.c
index 7b5d4deacfcd..64198d98226e 100644
--- a/mm/slab.c
+++ b/mm/slab.c
@@ -121,6 +121,120 @@
121#include <asm/page.h> 121#include <asm/page.h>
122 122
123/* 123/*
124 * On !PREEMPT_RT, raw irq flags are used as a per-CPU locking
125 * mechanism.
126 *
127 * On PREEMPT_RT, we use per-CPU locks for this. That's why the
128 * calling convention is changed slightly: a new 'flags' argument
129 * is passed to 'irq disable/enable' - the PREEMPT_RT code stores
130 * the CPU number of the lock there.
131 */
132#ifndef CONFIG_PREEMPT_RT
133
134# define slab_irq_disable(cpu) \
135 do { local_irq_disable(); (cpu) = smp_processor_id(); } while (0)
136# define slab_irq_enable(cpu) local_irq_enable()
137
138static inline void slab_irq_disable_this_rt(int cpu)
139{
140}
141
142static inline void slab_irq_enable_rt(int cpu)
143{
144}
145
146# define slab_irq_save(flags, cpu) \
147 do { local_irq_save(flags); (cpu) = smp_processor_id(); } while (0)
148# define slab_irq_restore(flags, cpu) local_irq_restore(flags)
149
150/*
151 * In the __GFP_WAIT case we enable/disable interrupts on !PREEMPT_RT,
152 * which has no per-CPU locking effect since we are holding the cache
153 * lock in that case already.
154 */
155static void slab_irq_enable_GFP_WAIT(gfp_t flags, int *cpu)
156{
157 if (flags & __GFP_WAIT)
158 local_irq_enable();
159}
160
161static void slab_irq_disable_GFP_WAIT(gfp_t flags, int *cpu)
162{
163 if (flags & __GFP_WAIT)
164 local_irq_disable();
165}
166
167# define slab_spin_lock_irq(lock, cpu) \
168 do { spin_lock_irq(lock); (cpu) = smp_processor_id(); } while (0)
169# define slab_spin_unlock_irq(lock, cpu) spin_unlock_irq(lock)
170
171# define slab_spin_lock_irqsave(lock, flags, cpu) \
172 do { spin_lock_irqsave(lock, flags); (cpu) = smp_processor_id(); } while (0)
173# define slab_spin_unlock_irqrestore(lock, flags, cpu) \
174 do { spin_unlock_irqrestore(lock, flags); } while (0)
175
176#else /* CONFIG_PREEMPT_RT */
177
178/*
179 * Instead of serializing the per-cpu state by disabling interrupts we do so
180 * by a lock. This keeps the code preemptable - albeit at the cost of remote
181 * memory access when the task does get migrated away.
182 */
183DEFINE_PER_CPU_LOCKED(int, slab_irq_locks) = { 0, };
184
185static void _slab_irq_disable(int *cpu)
186{
187 get_cpu_var_locked(slab_irq_locks, cpu);
188}
189
190#define slab_irq_disable(cpu) _slab_irq_disable(&(cpu))
191
192static inline void slab_irq_enable(int cpu)
193{
194 put_cpu_var_locked(slab_irq_locks, cpu);
195}
196
197static inline void slab_irq_disable_this_rt(int cpu)
198{
199 spin_lock(&__get_cpu_lock(slab_irq_locks, cpu));
200}
201
202static inline void slab_irq_enable_rt(int cpu)
203{
204 spin_unlock(&__get_cpu_lock(slab_irq_locks, cpu));
205}
206
207# define slab_irq_save(flags, cpu) \
208 do { slab_irq_disable(cpu); (void) (flags); } while (0)
209# define slab_irq_restore(flags, cpu) \
210 do { slab_irq_enable(cpu); (void) (flags); } while (0)
211
212/*
213 * On PREEMPT_RT we have to drop the locks unconditionally to avoid lock
214 * recursion on the cache_grow()->alloc_slabmgmt() path.
215 */
216static void slab_irq_enable_GFP_WAIT(gfp_t flags, int *cpu)
217{
218 slab_irq_enable(*cpu);
219}
220
221static void slab_irq_disable_GFP_WAIT(gfp_t flags, int *cpu)
222{
223 slab_irq_disable(*cpu);
224}
225
226# define slab_spin_lock_irq(lock, cpu) \
227 do { slab_irq_disable(cpu); spin_lock(lock); } while (0)
228# define slab_spin_unlock_irq(lock, cpu) \
229 do { spin_unlock(lock); slab_irq_enable(cpu); } while (0)
230# define slab_spin_lock_irqsave(lock, flags, cpu) \
231 do { slab_irq_disable(cpu); spin_lock_irqsave(lock, flags); } while (0)
232# define slab_spin_unlock_irqrestore(lock, flags, cpu) \
233 do { spin_unlock_irqrestore(lock, flags); slab_irq_enable(cpu); } while (0)
234
235#endif /* CONFIG_PREEMPT_RT */
236
237/*
124 * DEBUG - 1 for kmem_cache_create() to honour; SLAB_RED_ZONE & SLAB_POISON. 238 * DEBUG - 1 for kmem_cache_create() to honour; SLAB_RED_ZONE & SLAB_POISON.
125 * 0 for faster, smaller code (especially in the critical paths). 239 * 0 for faster, smaller code (especially in the critical paths).
126 * 240 *
@@ -316,7 +430,7 @@ struct kmem_list3 __initdata initkmem_list3[NUM_INIT_LISTS];
316static int drain_freelist(struct kmem_cache *cache, 430static int drain_freelist(struct kmem_cache *cache,
317 struct kmem_list3 *l3, int tofree); 431 struct kmem_list3 *l3, int tofree);
318static void free_block(struct kmem_cache *cachep, void **objpp, int len, 432static void free_block(struct kmem_cache *cachep, void **objpp, int len,
319 int node); 433 int node, int *this_cpu);
320static int enable_cpucache(struct kmem_cache *cachep, gfp_t gfp); 434static int enable_cpucache(struct kmem_cache *cachep, gfp_t gfp);
321static void cache_reap(struct work_struct *unused); 435static void cache_reap(struct work_struct *unused);
322 436
@@ -687,9 +801,10 @@ int slab_is_available(void)
687 801
688static DEFINE_PER_CPU(struct delayed_work, reap_work); 802static DEFINE_PER_CPU(struct delayed_work, reap_work);
689 803
690static inline struct array_cache *cpu_cache_get(struct kmem_cache *cachep) 804static inline struct array_cache *
805cpu_cache_get(struct kmem_cache *cachep, int this_cpu)
691{ 806{
692 return cachep->array[smp_processor_id()]; 807 return cachep->array[this_cpu];
693} 808}
694 809
695static inline struct kmem_cache *__find_general_cachep(size_t size, 810static inline struct kmem_cache *__find_general_cachep(size_t size,
@@ -930,7 +1045,7 @@ static int transfer_objects(struct array_cache *to,
930#ifndef CONFIG_NUMA 1045#ifndef CONFIG_NUMA
931 1046
932#define drain_alien_cache(cachep, alien) do { } while (0) 1047#define drain_alien_cache(cachep, alien) do { } while (0)
933#define reap_alien(cachep, l3) do { } while (0) 1048#define reap_alien(cachep, l3, this_cpu) 0
934 1049
935static inline struct array_cache **alloc_alien_cache(int node, int limit, gfp_t gfp) 1050static inline struct array_cache **alloc_alien_cache(int node, int limit, gfp_t gfp)
936{ 1051{
@@ -941,27 +1056,28 @@ static inline void free_alien_cache(struct array_cache **ac_ptr)
941{ 1056{
942} 1057}
943 1058
944static inline int cache_free_alien(struct kmem_cache *cachep, void *objp) 1059static inline int
1060cache_free_alien(struct kmem_cache *cachep, void *objp, int *this_cpu)
945{ 1061{
946 return 0; 1062 return 0;
947} 1063}
948 1064
949static inline void *alternate_node_alloc(struct kmem_cache *cachep, 1065static inline void *alternate_node_alloc(struct kmem_cache *cachep,
950 gfp_t flags) 1066 gfp_t flags, int *this_cpu)
951{ 1067{
952 return NULL; 1068 return NULL;
953} 1069}
954 1070
955static inline void *____cache_alloc_node(struct kmem_cache *cachep, 1071static inline void *____cache_alloc_node(struct kmem_cache *cachep,
956 gfp_t flags, int nodeid) 1072 gfp_t flags, int nodeid, int *this_cpu)
957{ 1073{
958 return NULL; 1074 return NULL;
959} 1075}
960 1076
961#else /* CONFIG_NUMA */ 1077#else /* CONFIG_NUMA */
962 1078
963static void *____cache_alloc_node(struct kmem_cache *, gfp_t, int); 1079static void *____cache_alloc_node(struct kmem_cache *, gfp_t, int, int *);
964static void *alternate_node_alloc(struct kmem_cache *, gfp_t); 1080static void *alternate_node_alloc(struct kmem_cache *, gfp_t, int *);
965 1081
966static struct array_cache **alloc_alien_cache(int node, int limit, gfp_t gfp) 1082static struct array_cache **alloc_alien_cache(int node, int limit, gfp_t gfp)
967{ 1083{
@@ -1002,7 +1118,8 @@ static void free_alien_cache(struct array_cache **ac_ptr)
1002} 1118}
1003 1119
1004static void __drain_alien_cache(struct kmem_cache *cachep, 1120static void __drain_alien_cache(struct kmem_cache *cachep,
1005 struct array_cache *ac, int node) 1121 struct array_cache *ac, int node,
1122 int *this_cpu)
1006{ 1123{
1007 struct kmem_list3 *rl3 = cachep->nodelists[node]; 1124 struct kmem_list3 *rl3 = cachep->nodelists[node];
1008 1125
@@ -1016,7 +1133,7 @@ static void __drain_alien_cache(struct kmem_cache *cachep,
1016 if (rl3->shared) 1133 if (rl3->shared)
1017 transfer_objects(rl3->shared, ac, ac->limit); 1134 transfer_objects(rl3->shared, ac, ac->limit);
1018 1135
1019 free_block(cachep, ac->entry, ac->avail, node); 1136 free_block(cachep, ac->entry, ac->avail, node, this_cpu);
1020 ac->avail = 0; 1137 ac->avail = 0;
1021 spin_unlock(&rl3->list_lock); 1138 spin_unlock(&rl3->list_lock);
1022 } 1139 }
@@ -1025,38 +1142,42 @@ static void __drain_alien_cache(struct kmem_cache *cachep,
1025/* 1142/*
1026 * Called from cache_reap() to regularly drain alien caches round robin. 1143 * Called from cache_reap() to regularly drain alien caches round robin.
1027 */ 1144 */
1028static void reap_alien(struct kmem_cache *cachep, struct kmem_list3 *l3) 1145static int
1146reap_alien(struct kmem_cache *cachep, struct kmem_list3 *l3, int *this_cpu)
1029{ 1147{
1030 int node = __get_cpu_var(reap_node); 1148 int node = per_cpu(reap_node, *this_cpu);
1031 1149
1032 if (l3->alien) { 1150 if (l3->alien) {
1033 struct array_cache *ac = l3->alien[node]; 1151 struct array_cache *ac = l3->alien[node];
1034 1152
1035 if (ac && ac->avail && spin_trylock_irq(&ac->lock)) { 1153 if (ac && ac->avail && spin_trylock_irq(&ac->lock)) {
1036 __drain_alien_cache(cachep, ac, node); 1154 __drain_alien_cache(cachep, ac, node, this_cpu);
1037 spin_unlock_irq(&ac->lock); 1155 spin_unlock_irq(&ac->lock);
1156 return 1;
1038 } 1157 }
1039 } 1158 }
1159 return 0;
1040} 1160}
1041 1161
1042static void drain_alien_cache(struct kmem_cache *cachep, 1162static void drain_alien_cache(struct kmem_cache *cachep,
1043 struct array_cache **alien) 1163 struct array_cache **alien)
1044{ 1164{
1045 int i = 0; 1165 int i = 0, this_cpu;
1046 struct array_cache *ac; 1166 struct array_cache *ac;
1047 unsigned long flags; 1167 unsigned long flags;
1048 1168
1049 for_each_online_node(i) { 1169 for_each_online_node(i) {
1050 ac = alien[i]; 1170 ac = alien[i];
1051 if (ac) { 1171 if (ac) {
1052 spin_lock_irqsave(&ac->lock, flags); 1172 slab_spin_lock_irqsave(&ac->lock, flags, this_cpu);
1053 __drain_alien_cache(cachep, ac, i); 1173 __drain_alien_cache(cachep, ac, i, &this_cpu);
1054 spin_unlock_irqrestore(&ac->lock, flags); 1174 slab_spin_unlock_irqrestore(&ac->lock, flags, this_cpu);
1055 } 1175 }
1056 } 1176 }
1057} 1177}
1058 1178
1059static inline int cache_free_alien(struct kmem_cache *cachep, void *objp) 1179static inline int
1180cache_free_alien(struct kmem_cache *cachep, void *objp, int *this_cpu)
1060{ 1181{
1061 struct slab *slabp = virt_to_slab(objp); 1182 struct slab *slabp = virt_to_slab(objp);
1062 int nodeid = slabp->nodeid; 1183 int nodeid = slabp->nodeid;
@@ -1064,7 +1185,7 @@ static inline int cache_free_alien(struct kmem_cache *cachep, void *objp)
1064 struct array_cache *alien = NULL; 1185 struct array_cache *alien = NULL;
1065 int node; 1186 int node;
1066 1187
1067 node = numa_node_id(); 1188 node = cpu_to_node(*this_cpu);
1068 1189
1069 /* 1190 /*
1070 * Make sure we are not freeing a object from another node to the array 1191 * Make sure we are not freeing a object from another node to the array
@@ -1080,20 +1201,20 @@ static inline int cache_free_alien(struct kmem_cache *cachep, void *objp)
1080 spin_lock(&alien->lock); 1201 spin_lock(&alien->lock);
1081 if (unlikely(alien->avail == alien->limit)) { 1202 if (unlikely(alien->avail == alien->limit)) {
1082 STATS_INC_ACOVERFLOW(cachep); 1203 STATS_INC_ACOVERFLOW(cachep);
1083 __drain_alien_cache(cachep, alien, nodeid); 1204 __drain_alien_cache(cachep, alien, nodeid, this_cpu);
1084 } 1205 }
1085 alien->entry[alien->avail++] = objp; 1206 alien->entry[alien->avail++] = objp;
1086 spin_unlock(&alien->lock); 1207 spin_unlock(&alien->lock);
1087 } else { 1208 } else {
1088 spin_lock(&(cachep->nodelists[nodeid])->list_lock); 1209 spin_lock(&(cachep->nodelists[nodeid])->list_lock);
1089 free_block(cachep, &objp, 1, nodeid); 1210 free_block(cachep, &objp, 1, nodeid, this_cpu);
1090 spin_unlock(&(cachep->nodelists[nodeid])->list_lock); 1211 spin_unlock(&(cachep->nodelists[nodeid])->list_lock);
1091 } 1212 }
1092 return 1; 1213 return 1;
1093} 1214}
1094#endif 1215#endif
1095 1216
1096static void __cpuinit cpuup_canceled(long cpu) 1217static void __cpuinit cpuup_canceled(int cpu)
1097{ 1218{
1098 struct kmem_cache *cachep; 1219 struct kmem_cache *cachep;
1099 struct kmem_list3 *l3 = NULL; 1220 struct kmem_list3 *l3 = NULL;
@@ -1104,6 +1225,7 @@ static void __cpuinit cpuup_canceled(long cpu)
1104 struct array_cache *nc; 1225 struct array_cache *nc;
1105 struct array_cache *shared; 1226 struct array_cache *shared;
1106 struct array_cache **alien; 1227 struct array_cache **alien;
1228 int orig_cpu = cpu;
1107 1229
1108 /* cpu is dead; no one can alloc from it. */ 1230 /* cpu is dead; no one can alloc from it. */
1109 nc = cachep->array[cpu]; 1231 nc = cachep->array[cpu];
@@ -1118,7 +1240,8 @@ static void __cpuinit cpuup_canceled(long cpu)
1118 /* Free limit for this kmem_list3 */ 1240 /* Free limit for this kmem_list3 */
1119 l3->free_limit -= cachep->batchcount; 1241 l3->free_limit -= cachep->batchcount;
1120 if (nc) 1242 if (nc)
1121 free_block(cachep, nc->entry, nc->avail, node); 1243 free_block(cachep, nc->entry, nc->avail, node,
1244 &cpu);
1122 1245
1123 if (!cpus_empty(*mask)) { 1246 if (!cpus_empty(*mask)) {
1124 spin_unlock_irq(&l3->list_lock); 1247 spin_unlock_irq(&l3->list_lock);
@@ -1128,7 +1251,7 @@ static void __cpuinit cpuup_canceled(long cpu)
1128 shared = l3->shared; 1251 shared = l3->shared;
1129 if (shared) { 1252 if (shared) {
1130 free_block(cachep, shared->entry, 1253 free_block(cachep, shared->entry,
1131 shared->avail, node); 1254 shared->avail, node, &cpu);
1132 l3->shared = NULL; 1255 l3->shared = NULL;
1133 } 1256 }
1134 1257
@@ -1144,6 +1267,7 @@ static void __cpuinit cpuup_canceled(long cpu)
1144 } 1267 }
1145free_array_cache: 1268free_array_cache:
1146 kfree(nc); 1269 kfree(nc);
1270 BUG_ON(cpu != orig_cpu);
1147 } 1271 }
1148 /* 1272 /*
1149 * In the previous loop, all the objects were freed to 1273 * In the previous loop, all the objects were freed to
@@ -1158,7 +1282,7 @@ free_array_cache:
1158 } 1282 }
1159} 1283}
1160 1284
1161static int __cpuinit cpuup_prepare(long cpu) 1285static int __cpuinit cpuup_prepare(int cpu)
1162{ 1286{
1163 struct kmem_cache *cachep; 1287 struct kmem_cache *cachep;
1164 struct kmem_list3 *l3 = NULL; 1288 struct kmem_list3 *l3 = NULL;
@@ -1266,10 +1390,19 @@ static int __cpuinit cpuup_callback(struct notifier_block *nfb,
1266 long cpu = (long)hcpu; 1390 long cpu = (long)hcpu;
1267 int err = 0; 1391 int err = 0;
1268 1392
1393
1269 switch (action) { 1394 switch (action) {
1270 case CPU_UP_PREPARE: 1395 case CPU_UP_PREPARE:
1271 case CPU_UP_PREPARE_FROZEN: 1396 case CPU_UP_PREPARE_FROZEN:
1272 mutex_lock(&cache_chain_mutex); 1397 mutex_lock(&cache_chain_mutex);
1398 /*
1399 * lock/unlock cycle to push any holders away -- no new ones
1400 * can come in due to the cpu still being offline.
1401 *
1402 * XXX -- weird case anyway, can it happen?
1403 */
1404 slab_irq_disable_this_rt(cpu);
1405 slab_irq_enable_rt(cpu);
1273 err = cpuup_prepare(cpu); 1406 err = cpuup_prepare(cpu);
1274 mutex_unlock(&cache_chain_mutex); 1407 mutex_unlock(&cache_chain_mutex);
1275 break; 1408 break;
@@ -1309,10 +1442,14 @@ static int __cpuinit cpuup_callback(struct notifier_block *nfb,
1309 case CPU_UP_CANCELED: 1442 case CPU_UP_CANCELED:
1310 case CPU_UP_CANCELED_FROZEN: 1443 case CPU_UP_CANCELED_FROZEN:
1311 mutex_lock(&cache_chain_mutex); 1444 mutex_lock(&cache_chain_mutex);
1445 slab_irq_disable_this_rt(cpu);
1312 cpuup_canceled(cpu); 1446 cpuup_canceled(cpu);
1447 slab_irq_enable_rt(cpu);
1313 mutex_unlock(&cache_chain_mutex); 1448 mutex_unlock(&cache_chain_mutex);
1314 break; 1449 break;
1315 } 1450 }
1451
1452
1316 return err ? NOTIFY_BAD : NOTIFY_OK; 1453 return err ? NOTIFY_BAD : NOTIFY_OK;
1317} 1454}
1318 1455
@@ -1499,32 +1636,34 @@ void __init kmem_cache_init(void)
1499 /* 4) Replace the bootstrap head arrays */ 1636 /* 4) Replace the bootstrap head arrays */
1500 { 1637 {
1501 struct array_cache *ptr; 1638 struct array_cache *ptr;
1639 int cpu = smp_processor_id();
1502 1640
1503 ptr = kmalloc(sizeof(struct arraycache_init), GFP_NOWAIT); 1641 ptr = kmalloc(sizeof(struct arraycache_init), GFP_NOWAIT);
1504 1642
1505 BUG_ON(cpu_cache_get(&cache_cache) != &initarray_cache.cache); 1643 BUG_ON(cpu_cache_get(&cache_cache, cpu) !=
1506 memcpy(ptr, cpu_cache_get(&cache_cache), 1644 &initarray_cache.cache);
1645 memcpy(ptr, cpu_cache_get(&cache_cache, cpu),
1507 sizeof(struct arraycache_init)); 1646 sizeof(struct arraycache_init));
1508 /* 1647 /*
1509 * Do not assume that spinlocks can be initialized via memcpy: 1648 * Do not assume that spinlocks can be initialized via memcpy:
1510 */ 1649 */
1511 spin_lock_init(&ptr->lock); 1650 spin_lock_init(&ptr->lock);
1512 1651
1513 cache_cache.array[smp_processor_id()] = ptr; 1652 cache_cache.array[cpu] = ptr;
1514 1653
1515 ptr = kmalloc(sizeof(struct arraycache_init), GFP_NOWAIT); 1654 ptr = kmalloc(sizeof(struct arraycache_init), GFP_NOWAIT);
1516 1655
1517 BUG_ON(cpu_cache_get(malloc_sizes[INDEX_AC].cs_cachep) 1656 BUG_ON(cpu_cache_get(malloc_sizes[INDEX_AC].cs_cachep, cpu)
1518 != &initarray_generic.cache); 1657 != &initarray_generic.cache);
1519 memcpy(ptr, cpu_cache_get(malloc_sizes[INDEX_AC].cs_cachep), 1658 memcpy(ptr,
1659 cpu_cache_get(malloc_sizes[INDEX_AC].cs_cachep, cpu),
1520 sizeof(struct arraycache_init)); 1660 sizeof(struct arraycache_init));
1521 /* 1661 /*
1522 * Do not assume that spinlocks can be initialized via memcpy: 1662 * Do not assume that spinlocks can be initialized via memcpy:
1523 */ 1663 */
1524 spin_lock_init(&ptr->lock); 1664 spin_lock_init(&ptr->lock);
1525 1665
1526 malloc_sizes[INDEX_AC].cs_cachep->array[smp_processor_id()] = 1666 malloc_sizes[INDEX_AC].cs_cachep->array[cpu] = ptr;
1527 ptr;
1528 } 1667 }
1529 /* 5) Replace the bootstrap kmem_list3's */ 1668 /* 5) Replace the bootstrap kmem_list3's */
1530 { 1669 {
@@ -1691,7 +1830,7 @@ static void store_stackinfo(struct kmem_cache *cachep, unsigned long *addr,
1691 1830
1692 *addr++ = 0x12345678; 1831 *addr++ = 0x12345678;
1693 *addr++ = caller; 1832 *addr++ = caller;
1694 *addr++ = smp_processor_id(); 1833 *addr++ = raw_smp_processor_id();
1695 size -= 3 * sizeof(unsigned long); 1834 size -= 3 * sizeof(unsigned long);
1696 { 1835 {
1697 unsigned long *sptr = &caller; 1836 unsigned long *sptr = &caller;
@@ -1881,6 +2020,10 @@ static void slab_destroy_debugcheck(struct kmem_cache *cachep, struct slab *slab
1881} 2020}
1882#endif 2021#endif
1883 2022
2023static void
2024__cache_free(struct kmem_cache *cachep, void *objp, int *this_cpu);
2025
2026
1884/** 2027/**
1885 * slab_destroy - destroy and release all objects in a slab 2028 * slab_destroy - destroy and release all objects in a slab
1886 * @cachep: cache pointer being destroyed 2029 * @cachep: cache pointer being destroyed
@@ -1890,7 +2033,8 @@ static void slab_destroy_debugcheck(struct kmem_cache *cachep, struct slab *slab
1890 * Before calling the slab must have been unlinked from the cache. The 2033 * Before calling the slab must have been unlinked from the cache. The
1891 * cache-lock is not held/needed. 2034 * cache-lock is not held/needed.
1892 */ 2035 */
1893static void slab_destroy(struct kmem_cache *cachep, struct slab *slabp) 2036static void
2037slab_destroy(struct kmem_cache *cachep, struct slab *slabp, int *this_cpu)
1894{ 2038{
1895 void *addr = slabp->s_mem - slabp->colouroff; 2039 void *addr = slabp->s_mem - slabp->colouroff;
1896 2040
@@ -1904,8 +2048,12 @@ static void slab_destroy(struct kmem_cache *cachep, struct slab *slabp)
1904 call_rcu(&slab_rcu->head, kmem_rcu_free); 2048 call_rcu(&slab_rcu->head, kmem_rcu_free);
1905 } else { 2049 } else {
1906 kmem_freepages(cachep, addr); 2050 kmem_freepages(cachep, addr);
1907 if (OFF_SLAB(cachep)) 2051 if (OFF_SLAB(cachep)) {
1908 kmem_cache_free(cachep->slabp_cache, slabp); 2052 if (this_cpu)
2053 __cache_free(cachep->slabp_cache, slabp, this_cpu);
2054 else
2055 kmem_cache_free(cachep->slabp_cache, slabp);
2056 }
1909 } 2057 }
1910} 2058}
1911 2059
@@ -2002,6 +2150,8 @@ static size_t calculate_slab_order(struct kmem_cache *cachep,
2002 2150
2003static int __init_refok setup_cpu_cache(struct kmem_cache *cachep, gfp_t gfp) 2151static int __init_refok setup_cpu_cache(struct kmem_cache *cachep, gfp_t gfp)
2004{ 2152{
2153 int this_cpu;
2154
2005 if (g_cpucache_up == FULL) 2155 if (g_cpucache_up == FULL)
2006 return enable_cpucache(cachep, gfp); 2156 return enable_cpucache(cachep, gfp);
2007 2157
@@ -2045,10 +2195,12 @@ static int __init_refok setup_cpu_cache(struct kmem_cache *cachep, gfp_t gfp)
2045 jiffies + REAPTIMEOUT_LIST3 + 2195 jiffies + REAPTIMEOUT_LIST3 +
2046 ((unsigned long)cachep) % REAPTIMEOUT_LIST3; 2196 ((unsigned long)cachep) % REAPTIMEOUT_LIST3;
2047 2197
2048 cpu_cache_get(cachep)->avail = 0; 2198 this_cpu = raw_smp_processor_id();
2049 cpu_cache_get(cachep)->limit = BOOT_CPUCACHE_ENTRIES; 2199
2050 cpu_cache_get(cachep)->batchcount = 1; 2200 cpu_cache_get(cachep, this_cpu)->avail = 0;
2051 cpu_cache_get(cachep)->touched = 0; 2201 cpu_cache_get(cachep, this_cpu)->limit = BOOT_CPUCACHE_ENTRIES;
2202 cpu_cache_get(cachep, this_cpu)->batchcount = 1;
2203 cpu_cache_get(cachep, this_cpu)->touched = 0;
2052 cachep->batchcount = 1; 2204 cachep->batchcount = 1;
2053 cachep->limit = BOOT_CPUCACHE_ENTRIES; 2205 cachep->limit = BOOT_CPUCACHE_ENTRIES;
2054 return 0; 2206 return 0;
@@ -2358,19 +2510,19 @@ EXPORT_SYMBOL(kmem_cache_create);
2358#if DEBUG 2510#if DEBUG
2359static void check_irq_off(void) 2511static void check_irq_off(void)
2360{ 2512{
2513/*
2514 * On PREEMPT_RT we use locks to protect the per-CPU lists,
2515 * and keep interrupts enabled.
2516 */
2517#ifndef CONFIG_PREEMPT_RT
2361 BUG_ON(!irqs_disabled()); 2518 BUG_ON(!irqs_disabled());
2519#endif
2362} 2520}
2363 2521
2364static void check_irq_on(void) 2522static void check_irq_on(void)
2365{ 2523{
2524#ifndef CONFIG_PREEMPT_RT
2366 BUG_ON(irqs_disabled()); 2525 BUG_ON(irqs_disabled());
2367}
2368
2369static void check_spinlock_acquired(struct kmem_cache *cachep)
2370{
2371#ifdef CONFIG_SMP
2372 check_irq_off();
2373 assert_spin_locked(&cachep->nodelists[numa_node_id()]->list_lock);
2374#endif 2526#endif
2375} 2527}
2376 2528
@@ -2385,34 +2537,67 @@ static void check_spinlock_acquired_node(struct kmem_cache *cachep, int node)
2385#else 2537#else
2386#define check_irq_off() do { } while(0) 2538#define check_irq_off() do { } while(0)
2387#define check_irq_on() do { } while(0) 2539#define check_irq_on() do { } while(0)
2388#define check_spinlock_acquired(x) do { } while(0)
2389#define check_spinlock_acquired_node(x, y) do { } while(0) 2540#define check_spinlock_acquired_node(x, y) do { } while(0)
2390#endif 2541#endif
2391 2542
2392static void drain_array(struct kmem_cache *cachep, struct kmem_list3 *l3, 2543static int drain_array(struct kmem_cache *cachep, struct kmem_list3 *l3,
2393 struct array_cache *ac, 2544 struct array_cache *ac,
2394 int force, int node); 2545 int force, int node);
2395 2546
2396static void do_drain(void *arg) 2547static void __do_drain(void *arg, int this_cpu)
2397{ 2548{
2398 struct kmem_cache *cachep = arg; 2549 struct kmem_cache *cachep = arg;
2550 int node = cpu_to_node(this_cpu);
2399 struct array_cache *ac; 2551 struct array_cache *ac;
2400 int node = numa_node_id();
2401 2552
2402 check_irq_off(); 2553 check_irq_off();
2403 ac = cpu_cache_get(cachep); 2554 ac = cpu_cache_get(cachep, this_cpu);
2404 spin_lock(&cachep->nodelists[node]->list_lock); 2555 spin_lock(&cachep->nodelists[node]->list_lock);
2405 free_block(cachep, ac->entry, ac->avail, node); 2556 free_block(cachep, ac->entry, ac->avail, node, &this_cpu);
2406 spin_unlock(&cachep->nodelists[node]->list_lock); 2557 spin_unlock(&cachep->nodelists[node]->list_lock);
2407 ac->avail = 0; 2558 ac->avail = 0;
2408} 2559}
2409 2560
2561#ifdef CONFIG_PREEMPT_RT
2562static void do_drain(void *arg, int this_cpu)
2563{
2564 __do_drain(arg, this_cpu);
2565}
2566#else
2567static void do_drain(void *arg)
2568{
2569 __do_drain(arg, smp_processor_id());
2570}
2571#endif
2572
2573#ifdef CONFIG_PREEMPT_RT
2574/*
2575 * execute func() for all CPUs. On PREEMPT_RT we dont actually have
2576 * to run on the remote CPUs - we only have to take their CPU-locks.
2577 * (This is a rare operation, so cacheline bouncing is not an issue.)
2578 */
2579static void
2580slab_on_each_cpu(void (*func)(void *arg, int this_cpu), void *arg)
2581{
2582 unsigned int i;
2583
2584 check_irq_on();
2585 for_each_online_cpu(i) {
2586 spin_lock(&__get_cpu_lock(slab_irq_locks, i));
2587 func(arg, i);
2588 spin_unlock(&__get_cpu_lock(slab_irq_locks, i));
2589 }
2590}
2591#else
2592# define slab_on_each_cpu(func, cachep) on_each_cpu(func, cachep, 1)
2593#endif
2594
2410static void drain_cpu_caches(struct kmem_cache *cachep) 2595static void drain_cpu_caches(struct kmem_cache *cachep)
2411{ 2596{
2412 struct kmem_list3 *l3; 2597 struct kmem_list3 *l3;
2413 int node; 2598 int node;
2414 2599
2415 on_each_cpu(do_drain, cachep, 1); 2600 slab_on_each_cpu(do_drain, cachep);
2416 check_irq_on(); 2601 check_irq_on();
2417 for_each_online_node(node) { 2602 for_each_online_node(node) {
2418 l3 = cachep->nodelists[node]; 2603 l3 = cachep->nodelists[node];
@@ -2437,16 +2622,16 @@ static int drain_freelist(struct kmem_cache *cache,
2437 struct kmem_list3 *l3, int tofree) 2622 struct kmem_list3 *l3, int tofree)
2438{ 2623{
2439 struct list_head *p; 2624 struct list_head *p;
2440 int nr_freed; 2625 int nr_freed, this_cpu;
2441 struct slab *slabp; 2626 struct slab *slabp;
2442 2627
2443 nr_freed = 0; 2628 nr_freed = 0;
2444 while (nr_freed < tofree && !list_empty(&l3->slabs_free)) { 2629 while (nr_freed < tofree && !list_empty(&l3->slabs_free)) {
2445 2630
2446 spin_lock_irq(&l3->list_lock); 2631 slab_spin_lock_irq(&l3->list_lock, this_cpu);
2447 p = l3->slabs_free.prev; 2632 p = l3->slabs_free.prev;
2448 if (p == &l3->slabs_free) { 2633 if (p == &l3->slabs_free) {
2449 spin_unlock_irq(&l3->list_lock); 2634 slab_spin_unlock_irq(&l3->list_lock, this_cpu);
2450 goto out; 2635 goto out;
2451 } 2636 }
2452 2637
@@ -2455,13 +2640,9 @@ static int drain_freelist(struct kmem_cache *cache,
2455 BUG_ON(slabp->inuse); 2640 BUG_ON(slabp->inuse);
2456#endif 2641#endif
2457 list_del(&slabp->list); 2642 list_del(&slabp->list);
2458 /*
2459 * Safe to drop the lock. The slab is no longer linked
2460 * to the cache.
2461 */
2462 l3->free_objects -= cache->num; 2643 l3->free_objects -= cache->num;
2463 spin_unlock_irq(&l3->list_lock); 2644 slab_destroy(cache, slabp, &this_cpu);
2464 slab_destroy(cache, slabp); 2645 slab_spin_unlock_irq(&l3->list_lock, this_cpu);
2465 nr_freed++; 2646 nr_freed++;
2466 } 2647 }
2467out: 2648out:
@@ -2725,8 +2906,8 @@ static void slab_map_pages(struct kmem_cache *cache, struct slab *slab,
2725 * Grow (by 1) the number of slabs within a cache. This is called by 2906 * Grow (by 1) the number of slabs within a cache. This is called by
2726 * kmem_cache_alloc() when there are no active objs left in a cache. 2907 * kmem_cache_alloc() when there are no active objs left in a cache.
2727 */ 2908 */
2728static int cache_grow(struct kmem_cache *cachep, 2909static int cache_grow(struct kmem_cache *cachep, gfp_t flags, int nodeid,
2729 gfp_t flags, int nodeid, void *objp) 2910 void *objp, int *this_cpu)
2730{ 2911{
2731 struct slab *slabp; 2912 struct slab *slabp;
2732 size_t offset; 2913 size_t offset;
@@ -2754,8 +2935,7 @@ static int cache_grow(struct kmem_cache *cachep,
2754 2935
2755 offset *= cachep->colour_off; 2936 offset *= cachep->colour_off;
2756 2937
2757 if (local_flags & __GFP_WAIT) 2938 slab_irq_enable_GFP_WAIT(local_flags, this_cpu);
2758 local_irq_enable();
2759 2939
2760 /* 2940 /*
2761 * The test for missing atomic flag is performed here, rather than 2941 * The test for missing atomic flag is performed here, rather than
@@ -2784,8 +2964,8 @@ static int cache_grow(struct kmem_cache *cachep,
2784 2964
2785 cache_init_objs(cachep, slabp); 2965 cache_init_objs(cachep, slabp);
2786 2966
2787 if (local_flags & __GFP_WAIT) 2967 slab_irq_disable_GFP_WAIT(local_flags, this_cpu);
2788 local_irq_disable(); 2968
2789 check_irq_off(); 2969 check_irq_off();
2790 spin_lock(&l3->list_lock); 2970 spin_lock(&l3->list_lock);
2791 2971
@@ -2798,8 +2978,7 @@ static int cache_grow(struct kmem_cache *cachep,
2798opps1: 2978opps1:
2799 kmem_freepages(cachep, objp); 2979 kmem_freepages(cachep, objp);
2800failed: 2980failed:
2801 if (local_flags & __GFP_WAIT) 2981 slab_irq_disable_GFP_WAIT(local_flags, this_cpu);
2802 local_irq_disable();
2803 return 0; 2982 return 0;
2804} 2983}
2805 2984
@@ -2921,7 +3100,8 @@ bad:
2921#define check_slabp(x,y) do { } while(0) 3100#define check_slabp(x,y) do { } while(0)
2922#endif 3101#endif
2923 3102
2924static void *cache_alloc_refill(struct kmem_cache *cachep, gfp_t flags) 3103static void *
3104cache_alloc_refill(struct kmem_cache *cachep, gfp_t flags, int *this_cpu)
2925{ 3105{
2926 int batchcount; 3106 int batchcount;
2927 struct kmem_list3 *l3; 3107 struct kmem_list3 *l3;
@@ -2931,7 +3111,7 @@ static void *cache_alloc_refill(struct kmem_cache *cachep, gfp_t flags)
2931retry: 3111retry:
2932 check_irq_off(); 3112 check_irq_off();
2933 node = numa_node_id(); 3113 node = numa_node_id();
2934 ac = cpu_cache_get(cachep); 3114 ac = cpu_cache_get(cachep, *this_cpu);
2935 batchcount = ac->batchcount; 3115 batchcount = ac->batchcount;
2936 if (!ac->touched && batchcount > BATCHREFILL_LIMIT) { 3116 if (!ac->touched && batchcount > BATCHREFILL_LIMIT) {
2937 /* 3117 /*
@@ -2941,7 +3121,7 @@ retry:
2941 */ 3121 */
2942 batchcount = BATCHREFILL_LIMIT; 3122 batchcount = BATCHREFILL_LIMIT;
2943 } 3123 }
2944 l3 = cachep->nodelists[node]; 3124 l3 = cachep->nodelists[cpu_to_node(*this_cpu)];
2945 3125
2946 BUG_ON(ac->avail > 0 || !l3); 3126 BUG_ON(ac->avail > 0 || !l3);
2947 spin_lock(&l3->list_lock); 3127 spin_lock(&l3->list_lock);
@@ -2964,7 +3144,7 @@ retry:
2964 3144
2965 slabp = list_entry(entry, struct slab, list); 3145 slabp = list_entry(entry, struct slab, list);
2966 check_slabp(cachep, slabp); 3146 check_slabp(cachep, slabp);
2967 check_spinlock_acquired(cachep); 3147 check_spinlock_acquired_node(cachep, cpu_to_node(*this_cpu));
2968 3148
2969 /* 3149 /*
2970 * The slab was either on partial or free list so 3150 * The slab was either on partial or free list so
@@ -2978,8 +3158,9 @@ retry:
2978 STATS_INC_ACTIVE(cachep); 3158 STATS_INC_ACTIVE(cachep);
2979 STATS_SET_HIGH(cachep); 3159 STATS_SET_HIGH(cachep);
2980 3160
2981 ac->entry[ac->avail++] = slab_get_obj(cachep, slabp, 3161 ac->entry[ac->avail++] =
2982 node); 3162 slab_get_obj(cachep, slabp,
3163 cpu_to_node(*this_cpu));
2983 } 3164 }
2984 check_slabp(cachep, slabp); 3165 check_slabp(cachep, slabp);
2985 3166
@@ -2998,10 +3179,10 @@ alloc_done:
2998 3179
2999 if (unlikely(!ac->avail)) { 3180 if (unlikely(!ac->avail)) {
3000 int x; 3181 int x;
3001 x = cache_grow(cachep, flags | GFP_THISNODE, node, NULL); 3182 x = cache_grow(cachep, flags | GFP_THISNODE, cpu_to_node(*this_cpu), NULL, this_cpu);
3002 3183
3003 /* cache_grow can reenable interrupts, then ac could change. */ 3184 /* cache_grow can reenable interrupts, then ac could change. */
3004 ac = cpu_cache_get(cachep); 3185 ac = cpu_cache_get(cachep, *this_cpu);
3005 if (!x && ac->avail == 0) /* no objects in sight? abort */ 3186 if (!x && ac->avail == 0) /* no objects in sight? abort */
3006 return NULL; 3187 return NULL;
3007 3188
@@ -3088,21 +3269,22 @@ static bool slab_should_failslab(struct kmem_cache *cachep, gfp_t flags)
3088 return should_failslab(obj_size(cachep), flags); 3269 return should_failslab(obj_size(cachep), flags);
3089} 3270}
3090 3271
3091static inline void *____cache_alloc(struct kmem_cache *cachep, gfp_t flags) 3272static inline void *
3273____cache_alloc(struct kmem_cache *cachep, gfp_t flags, int *this_cpu)
3092{ 3274{
3093 void *objp; 3275 void *objp;
3094 struct array_cache *ac; 3276 struct array_cache *ac;
3095 3277
3096 check_irq_off(); 3278 check_irq_off();
3097 3279
3098 ac = cpu_cache_get(cachep); 3280 ac = cpu_cache_get(cachep, *this_cpu);
3099 if (likely(ac->avail)) { 3281 if (likely(ac->avail)) {
3100 STATS_INC_ALLOCHIT(cachep); 3282 STATS_INC_ALLOCHIT(cachep);
3101 ac->touched = 1; 3283 ac->touched = 1;
3102 objp = ac->entry[--ac->avail]; 3284 objp = ac->entry[--ac->avail];
3103 } else { 3285 } else {
3104 STATS_INC_ALLOCMISS(cachep); 3286 STATS_INC_ALLOCMISS(cachep);
3105 objp = cache_alloc_refill(cachep, flags); 3287 objp = cache_alloc_refill(cachep, flags, this_cpu);
3106 } 3288 }
3107 /* 3289 /*
3108 * To avoid a false negative, if an object that is in one of the 3290 * To avoid a false negative, if an object that is in one of the
@@ -3120,7 +3302,8 @@ static inline void *____cache_alloc(struct kmem_cache *cachep, gfp_t flags)
3120 * If we are in_interrupt, then process context, including cpusets and 3302 * If we are in_interrupt, then process context, including cpusets and
3121 * mempolicy, may not apply and should not be used for allocation policy. 3303 * mempolicy, may not apply and should not be used for allocation policy.
3122 */ 3304 */
3123static void *alternate_node_alloc(struct kmem_cache *cachep, gfp_t flags) 3305static void *alternate_node_alloc(struct kmem_cache *cachep, gfp_t flags,
3306 int *this_cpu)
3124{ 3307{
3125 int nid_alloc, nid_here; 3308 int nid_alloc, nid_here;
3126 3309
@@ -3132,7 +3315,7 @@ static void *alternate_node_alloc(struct kmem_cache *cachep, gfp_t flags)
3132 else if (current->mempolicy) 3315 else if (current->mempolicy)
3133 nid_alloc = slab_node(current->mempolicy); 3316 nid_alloc = slab_node(current->mempolicy);
3134 if (nid_alloc != nid_here) 3317 if (nid_alloc != nid_here)
3135 return ____cache_alloc_node(cachep, flags, nid_alloc); 3318 return ____cache_alloc_node(cachep, flags, nid_alloc, this_cpu);
3136 return NULL; 3319 return NULL;
3137} 3320}
3138 3321
@@ -3144,7 +3327,7 @@ static void *alternate_node_alloc(struct kmem_cache *cachep, gfp_t flags)
3144 * allocator to do its reclaim / fallback magic. We then insert the 3327 * allocator to do its reclaim / fallback magic. We then insert the
3145 * slab into the proper nodelist and then allocate from it. 3328 * slab into the proper nodelist and then allocate from it.
3146 */ 3329 */
3147static void *fallback_alloc(struct kmem_cache *cache, gfp_t flags) 3330static void *fallback_alloc(struct kmem_cache *cache, gfp_t flags, int *this_cpu)
3148{ 3331{
3149 struct zonelist *zonelist; 3332 struct zonelist *zonelist;
3150 gfp_t local_flags; 3333 gfp_t local_flags;
@@ -3172,7 +3355,8 @@ retry:
3172 cache->nodelists[nid] && 3355 cache->nodelists[nid] &&
3173 cache->nodelists[nid]->free_objects) { 3356 cache->nodelists[nid]->free_objects) {
3174 obj = ____cache_alloc_node(cache, 3357 obj = ____cache_alloc_node(cache,
3175 flags | GFP_THISNODE, nid); 3358 flags | GFP_THISNODE, nid,
3359 this_cpu);
3176 if (obj) 3360 if (obj)
3177 break; 3361 break;
3178 } 3362 }
@@ -3185,20 +3369,21 @@ retry:
3185 * We may trigger various forms of reclaim on the allowed 3369 * We may trigger various forms of reclaim on the allowed
3186 * set and go into memory reserves if necessary. 3370 * set and go into memory reserves if necessary.
3187 */ 3371 */
3188 if (local_flags & __GFP_WAIT) 3372 slab_irq_enable_GFP_WAIT(local_flags, this_cpu);
3189 local_irq_enable(); 3373
3190 kmem_flagcheck(cache, flags); 3374 kmem_flagcheck(cache, flags);
3191 obj = kmem_getpages(cache, local_flags, numa_node_id()); 3375 obj = kmem_getpages(cache, local_flags, cpu_to_node(*this_cpu));
3192 if (local_flags & __GFP_WAIT) 3376
3193 local_irq_disable(); 3377 slab_irq_disable_GFP_WAIT(local_flags, this_cpu);
3378
3194 if (obj) { 3379 if (obj) {
3195 /* 3380 /*
3196 * Insert into the appropriate per node queues 3381 * Insert into the appropriate per node queues
3197 */ 3382 */
3198 nid = page_to_nid(virt_to_page(obj)); 3383 nid = page_to_nid(virt_to_page(obj));
3199 if (cache_grow(cache, flags, nid, obj)) { 3384 if (cache_grow(cache, flags, nid, obj, this_cpu)) {
3200 obj = ____cache_alloc_node(cache, 3385 obj = ____cache_alloc_node(cache,
3201 flags | GFP_THISNODE, nid); 3386 flags | GFP_THISNODE, nid, this_cpu);
3202 if (!obj) 3387 if (!obj)
3203 /* 3388 /*
3204 * Another processor may allocate the 3389 * Another processor may allocate the
@@ -3219,7 +3404,7 @@ retry:
3219 * A interface to enable slab creation on nodeid 3404 * A interface to enable slab creation on nodeid
3220 */ 3405 */
3221static void *____cache_alloc_node(struct kmem_cache *cachep, gfp_t flags, 3406static void *____cache_alloc_node(struct kmem_cache *cachep, gfp_t flags,
3222 int nodeid) 3407 int nodeid, int *this_cpu)
3223{ 3408{
3224 struct list_head *entry; 3409 struct list_head *entry;
3225 struct slab *slabp; 3410 struct slab *slabp;
@@ -3267,11 +3452,11 @@ retry:
3267 3452
3268must_grow: 3453must_grow:
3269 spin_unlock(&l3->list_lock); 3454 spin_unlock(&l3->list_lock);
3270 x = cache_grow(cachep, flags | GFP_THISNODE, nodeid, NULL); 3455 x = cache_grow(cachep, flags | GFP_THISNODE, nodeid, NULL, this_cpu);
3271 if (x) 3456 if (x)
3272 goto retry; 3457 goto retry;
3273 3458
3274 return fallback_alloc(cachep, flags); 3459 return fallback_alloc(cachep, flags, this_cpu);
3275 3460
3276done: 3461done:
3277 return obj; 3462 return obj;
@@ -3294,6 +3479,7 @@ __cache_alloc_node(struct kmem_cache *cachep, gfp_t flags, int nodeid,
3294 void *caller) 3479 void *caller)
3295{ 3480{
3296 unsigned long save_flags; 3481 unsigned long save_flags;
3482 int this_cpu, this_node;
3297 void *ptr; 3483 void *ptr;
3298 3484
3299 flags &= gfp_allowed_mask; 3485 flags &= gfp_allowed_mask;
@@ -3304,32 +3490,34 @@ __cache_alloc_node(struct kmem_cache *cachep, gfp_t flags, int nodeid,
3304 return NULL; 3490 return NULL;
3305 3491
3306 cache_alloc_debugcheck_before(cachep, flags); 3492 cache_alloc_debugcheck_before(cachep, flags);
3307 local_irq_save(save_flags);
3308 3493
3494 slab_irq_save(save_flags, this_cpu);
3495
3496 this_node = cpu_to_node(this_cpu);
3309 if (unlikely(nodeid == -1)) 3497 if (unlikely(nodeid == -1))
3310 nodeid = numa_node_id(); 3498 nodeid = this_node;
3311 3499
3312 if (unlikely(!cachep->nodelists[nodeid])) { 3500 if (unlikely(!cachep->nodelists[nodeid])) {
3313 /* Node not bootstrapped yet */ 3501 /* Node not bootstrapped yet */
3314 ptr = fallback_alloc(cachep, flags); 3502 ptr = fallback_alloc(cachep, flags, &this_cpu);
3315 goto out; 3503 goto out;
3316 } 3504 }
3317 3505
3318 if (nodeid == numa_node_id()) { 3506 if (nodeid == this_node) {
3319 /* 3507 /*
3320 * Use the locally cached objects if possible. 3508 * Use the locally cached objects if possible.
3321 * However ____cache_alloc does not allow fallback 3509 * However ____cache_alloc does not allow fallback
3322 * to other nodes. It may fail while we still have 3510 * to other nodes. It may fail while we still have
3323 * objects on other nodes available. 3511 * objects on other nodes available.
3324 */ 3512 */
3325 ptr = ____cache_alloc(cachep, flags); 3513 ptr = ____cache_alloc(cachep, flags, &this_cpu);
3326 if (ptr) 3514 if (ptr)
3327 goto out; 3515 goto out;
3328 } 3516 }
3329 /* ___cache_alloc_node can fall back to other nodes */ 3517 /* ___cache_alloc_node can fall back to other nodes */
3330 ptr = ____cache_alloc_node(cachep, flags, nodeid); 3518 ptr = ____cache_alloc_node(cachep, flags, nodeid, &this_cpu);
3331 out: 3519 out:
3332 local_irq_restore(save_flags); 3520 slab_irq_restore(save_flags, this_cpu);
3333 ptr = cache_alloc_debugcheck_after(cachep, flags, ptr, caller); 3521 ptr = cache_alloc_debugcheck_after(cachep, flags, ptr, caller);
3334 kmemleak_alloc_recursive(ptr, obj_size(cachep), 1, cachep->flags, 3522 kmemleak_alloc_recursive(ptr, obj_size(cachep), 1, cachep->flags,
3335 flags); 3523 flags);
@@ -3344,33 +3532,33 @@ __cache_alloc_node(struct kmem_cache *cachep, gfp_t flags, int nodeid,
3344} 3532}
3345 3533
3346static __always_inline void * 3534static __always_inline void *
3347__do_cache_alloc(struct kmem_cache *cache, gfp_t flags) 3535__do_cache_alloc(struct kmem_cache *cache, gfp_t flags, int *this_cpu)
3348{ 3536{
3349 void *objp; 3537 void *objp;
3350 3538
3351 if (unlikely(current->flags & (PF_SPREAD_SLAB | PF_MEMPOLICY))) { 3539 if (unlikely(current->flags & (PF_SPREAD_SLAB | PF_MEMPOLICY))) {
3352 objp = alternate_node_alloc(cache, flags); 3540 objp = alternate_node_alloc(cache, flags, this_cpu);
3353 if (objp) 3541 if (objp)
3354 goto out; 3542 goto out;
3355 } 3543 }
3356 objp = ____cache_alloc(cache, flags);
3357 3544
3545 objp = ____cache_alloc(cache, flags, this_cpu);
3358 /* 3546 /*
3359 * We may just have run out of memory on the local node. 3547 * We may just have run out of memory on the local node.
3360 * ____cache_alloc_node() knows how to locate memory on other nodes 3548 * ____cache_alloc_node() knows how to locate memory on other nodes
3361 */ 3549 */
3362 if (!objp) 3550 if (!objp)
3363 objp = ____cache_alloc_node(cache, flags, numa_node_id()); 3551 objp = ____cache_alloc_node(cache, flags,
3364 3552 cpu_to_node(*this_cpu), this_cpu);
3365 out: 3553 out:
3366 return objp; 3554 return objp;
3367} 3555}
3368#else 3556#else
3369 3557
3370static __always_inline void * 3558static __always_inline void *
3371__do_cache_alloc(struct kmem_cache *cachep, gfp_t flags) 3559__do_cache_alloc(struct kmem_cache *cachep, gfp_t flags, int *this_cpu)
3372{ 3560{
3373 return ____cache_alloc(cachep, flags); 3561 return ____cache_alloc(cachep, flags, this_cpu);
3374} 3562}
3375 3563
3376#endif /* CONFIG_NUMA */ 3564#endif /* CONFIG_NUMA */
@@ -3379,6 +3567,7 @@ static __always_inline void *
3379__cache_alloc(struct kmem_cache *cachep, gfp_t flags, void *caller) 3567__cache_alloc(struct kmem_cache *cachep, gfp_t flags, void *caller)
3380{ 3568{
3381 unsigned long save_flags; 3569 unsigned long save_flags;
3570 int this_cpu;
3382 void *objp; 3571 void *objp;
3383 3572
3384 flags &= gfp_allowed_mask; 3573 flags &= gfp_allowed_mask;
@@ -3389,9 +3578,9 @@ __cache_alloc(struct kmem_cache *cachep, gfp_t flags, void *caller)
3389 return NULL; 3578 return NULL;
3390 3579
3391 cache_alloc_debugcheck_before(cachep, flags); 3580 cache_alloc_debugcheck_before(cachep, flags);
3392 local_irq_save(save_flags); 3581 slab_irq_save(save_flags, this_cpu);
3393 objp = __do_cache_alloc(cachep, flags); 3582 objp = __do_cache_alloc(cachep, flags, &this_cpu);
3394 local_irq_restore(save_flags); 3583 slab_irq_restore(save_flags, this_cpu);
3395 objp = cache_alloc_debugcheck_after(cachep, flags, objp, caller); 3584 objp = cache_alloc_debugcheck_after(cachep, flags, objp, caller);
3396 kmemleak_alloc_recursive(objp, obj_size(cachep), 1, cachep->flags, 3585 kmemleak_alloc_recursive(objp, obj_size(cachep), 1, cachep->flags,
3397 flags); 3586 flags);
@@ -3410,7 +3599,7 @@ __cache_alloc(struct kmem_cache *cachep, gfp_t flags, void *caller)
3410 * Caller needs to acquire correct kmem_list's list_lock 3599 * Caller needs to acquire correct kmem_list's list_lock
3411 */ 3600 */
3412static void free_block(struct kmem_cache *cachep, void **objpp, int nr_objects, 3601static void free_block(struct kmem_cache *cachep, void **objpp, int nr_objects,
3413 int node) 3602 int node, int *this_cpu)
3414{ 3603{
3415 int i; 3604 int i;
3416 struct kmem_list3 *l3; 3605 struct kmem_list3 *l3;
@@ -3439,7 +3628,7 @@ static void free_block(struct kmem_cache *cachep, void **objpp, int nr_objects,
3439 * a different cache, refer to comments before 3628 * a different cache, refer to comments before
3440 * alloc_slabmgmt. 3629 * alloc_slabmgmt.
3441 */ 3630 */
3442 slab_destroy(cachep, slabp); 3631 slab_destroy(cachep, slabp, this_cpu);
3443 } else { 3632 } else {
3444 list_add(&slabp->list, &l3->slabs_free); 3633 list_add(&slabp->list, &l3->slabs_free);
3445 } 3634 }
@@ -3453,11 +3642,12 @@ static void free_block(struct kmem_cache *cachep, void **objpp, int nr_objects,
3453 } 3642 }
3454} 3643}
3455 3644
3456static void cache_flusharray(struct kmem_cache *cachep, struct array_cache *ac) 3645static void
3646cache_flusharray(struct kmem_cache *cachep, struct array_cache *ac, int *this_cpu)
3457{ 3647{
3458 int batchcount; 3648 int batchcount;
3459 struct kmem_list3 *l3; 3649 struct kmem_list3 *l3;
3460 int node = numa_node_id(); 3650 int node = cpu_to_node(*this_cpu);
3461 3651
3462 batchcount = ac->batchcount; 3652 batchcount = ac->batchcount;
3463#if DEBUG 3653#if DEBUG
@@ -3479,7 +3669,7 @@ static void cache_flusharray(struct kmem_cache *cachep, struct array_cache *ac)
3479 } 3669 }
3480 } 3670 }
3481 3671
3482 free_block(cachep, ac->entry, batchcount, node); 3672 free_block(cachep, ac->entry, batchcount, node, this_cpu);
3483free_done: 3673free_done:
3484#if STATS 3674#if STATS
3485 { 3675 {
@@ -3508,9 +3698,10 @@ free_done:
3508 * Release an obj back to its cache. If the obj has a constructed state, it must 3698 * Release an obj back to its cache. If the obj has a constructed state, it must
3509 * be in this state _before_ it is released. Called with disabled ints. 3699 * be in this state _before_ it is released. Called with disabled ints.
3510 */ 3700 */
3511static inline void __cache_free(struct kmem_cache *cachep, void *objp) 3701static inline void
3702__cache_free(struct kmem_cache *cachep, void *objp, int *this_cpu)
3512{ 3703{
3513 struct array_cache *ac = cpu_cache_get(cachep); 3704 struct array_cache *ac = cpu_cache_get(cachep, *this_cpu);
3514 3705
3515 check_irq_off(); 3706 check_irq_off();
3516 kmemleak_free_recursive(objp, cachep->flags); 3707 kmemleak_free_recursive(objp, cachep->flags);
@@ -3525,7 +3716,7 @@ static inline void __cache_free(struct kmem_cache *cachep, void *objp)
3525 * variable to skip the call, which is mostly likely to be present in 3716 * variable to skip the call, which is mostly likely to be present in
3526 * the cache. 3717 * the cache.
3527 */ 3718 */
3528 if (nr_online_nodes > 1 && cache_free_alien(cachep, objp)) 3719 if (nr_online_nodes > 1 && cache_free_alien(cachep, objp, this_cpu))
3529 return; 3720 return;
3530 3721
3531 if (likely(ac->avail < ac->limit)) { 3722 if (likely(ac->avail < ac->limit)) {
@@ -3534,7 +3725,7 @@ static inline void __cache_free(struct kmem_cache *cachep, void *objp)
3534 return; 3725 return;
3535 } else { 3726 } else {
3536 STATS_INC_FREEMISS(cachep); 3727 STATS_INC_FREEMISS(cachep);
3537 cache_flusharray(cachep, ac); 3728 cache_flusharray(cachep, ac, this_cpu);
3538 ac->entry[ac->avail++] = objp; 3729 ac->entry[ac->avail++] = objp;
3539 } 3730 }
3540} 3731}
@@ -3733,13 +3924,14 @@ EXPORT_SYMBOL(__kmalloc);
3733void kmem_cache_free(struct kmem_cache *cachep, void *objp) 3924void kmem_cache_free(struct kmem_cache *cachep, void *objp)
3734{ 3925{
3735 unsigned long flags; 3926 unsigned long flags;
3927 int this_cpu;
3736 3928
3737 local_irq_save(flags); 3929 slab_irq_save(flags, this_cpu);
3738 debug_check_no_locks_freed(objp, obj_size(cachep)); 3930 debug_check_no_locks_freed(objp, obj_size(cachep));
3739 if (!(cachep->flags & SLAB_DEBUG_OBJECTS)) 3931 if (!(cachep->flags & SLAB_DEBUG_OBJECTS))
3740 debug_check_no_obj_freed(objp, obj_size(cachep)); 3932 debug_check_no_obj_freed(objp, obj_size(cachep));
3741 __cache_free(cachep, objp); 3933 __cache_free(cachep, objp, &this_cpu);
3742 local_irq_restore(flags); 3934 slab_irq_restore(flags, this_cpu);
3743 3935
3744 trace_kmem_cache_free(_RET_IP_, objp); 3936 trace_kmem_cache_free(_RET_IP_, objp);
3745} 3937}
@@ -3758,18 +3950,19 @@ void kfree(const void *objp)
3758{ 3950{
3759 struct kmem_cache *c; 3951 struct kmem_cache *c;
3760 unsigned long flags; 3952 unsigned long flags;
3953 int this_cpu;
3761 3954
3762 trace_kfree(_RET_IP_, objp); 3955 trace_kfree(_RET_IP_, objp);
3763 3956
3764 if (unlikely(ZERO_OR_NULL_PTR(objp))) 3957 if (unlikely(ZERO_OR_NULL_PTR(objp)))
3765 return; 3958 return;
3766 local_irq_save(flags); 3959 slab_irq_save(flags, this_cpu);
3767 kfree_debugcheck(objp); 3960 kfree_debugcheck(objp);
3768 c = virt_to_cache(objp); 3961 c = virt_to_cache(objp);
3769 debug_check_no_locks_freed(objp, obj_size(c)); 3962 debug_check_no_locks_freed(objp, obj_size(c));
3770 debug_check_no_obj_freed(objp, obj_size(c)); 3963 debug_check_no_obj_freed(objp, obj_size(c));
3771 __cache_free(c, (void *)objp); 3964 __cache_free(c, (void *)objp, &this_cpu);
3772 local_irq_restore(flags); 3965 slab_irq_restore(flags, this_cpu);
3773} 3966}
3774EXPORT_SYMBOL(kfree); 3967EXPORT_SYMBOL(kfree);
3775 3968
@@ -3790,7 +3983,7 @@ EXPORT_SYMBOL_GPL(kmem_cache_name);
3790 */ 3983 */
3791static int alloc_kmemlist(struct kmem_cache *cachep, gfp_t gfp) 3984static int alloc_kmemlist(struct kmem_cache *cachep, gfp_t gfp)
3792{ 3985{
3793 int node; 3986 int node, this_cpu;
3794 struct kmem_list3 *l3; 3987 struct kmem_list3 *l3;
3795 struct array_cache *new_shared; 3988 struct array_cache *new_shared;
3796 struct array_cache **new_alien = NULL; 3989 struct array_cache **new_alien = NULL;
@@ -3818,11 +4011,11 @@ static int alloc_kmemlist(struct kmem_cache *cachep, gfp_t gfp)
3818 if (l3) { 4011 if (l3) {
3819 struct array_cache *shared = l3->shared; 4012 struct array_cache *shared = l3->shared;
3820 4013
3821 spin_lock_irq(&l3->list_lock); 4014 slab_spin_lock_irq(&l3->list_lock, this_cpu);
3822 4015
3823 if (shared) 4016 if (shared)
3824 free_block(cachep, shared->entry, 4017 free_block(cachep, shared->entry,
3825 shared->avail, node); 4018 shared->avail, node, &this_cpu);
3826 4019
3827 l3->shared = new_shared; 4020 l3->shared = new_shared;
3828 if (!l3->alien) { 4021 if (!l3->alien) {
@@ -3831,7 +4024,7 @@ static int alloc_kmemlist(struct kmem_cache *cachep, gfp_t gfp)
3831 } 4024 }
3832 l3->free_limit = (1 + nr_cpus_node(node)) * 4025 l3->free_limit = (1 + nr_cpus_node(node)) *
3833 cachep->batchcount + cachep->num; 4026 cachep->batchcount + cachep->num;
3834 spin_unlock_irq(&l3->list_lock); 4027 slab_spin_unlock_irq(&l3->list_lock, this_cpu);
3835 kfree(shared); 4028 kfree(shared);
3836 free_alien_cache(new_alien); 4029 free_alien_cache(new_alien);
3837 continue; 4030 continue;
@@ -3878,24 +4071,36 @@ struct ccupdate_struct {
3878 struct array_cache *new[NR_CPUS]; 4071 struct array_cache *new[NR_CPUS];
3879}; 4072};
3880 4073
3881static void do_ccupdate_local(void *info) 4074static void __do_ccupdate_local(void *info, int this_cpu)
3882{ 4075{
3883 struct ccupdate_struct *new = info; 4076 struct ccupdate_struct *new = info;
3884 struct array_cache *old; 4077 struct array_cache *old;
3885 4078
3886 check_irq_off(); 4079 check_irq_off();
3887 old = cpu_cache_get(new->cachep); 4080 old = cpu_cache_get(new->cachep, this_cpu);
3888 4081
3889 new->cachep->array[smp_processor_id()] = new->new[smp_processor_id()]; 4082 new->cachep->array[this_cpu] = new->new[this_cpu];
3890 new->new[smp_processor_id()] = old; 4083 new->new[this_cpu] = old;
3891} 4084}
3892 4085
4086#ifdef CONFIG_PREEMPT_RT
4087static void do_ccupdate_local(void *arg, int this_cpu)
4088{
4089 __do_ccupdate_local(arg, this_cpu);
4090}
4091#else
4092static void do_ccupdate_local(void *arg)
4093{
4094 __do_ccupdate_local(arg, smp_processor_id());
4095}
4096#endif
4097
3893/* Always called with the cache_chain_mutex held */ 4098/* Always called with the cache_chain_mutex held */
3894static int do_tune_cpucache(struct kmem_cache *cachep, int limit, 4099static int do_tune_cpucache(struct kmem_cache *cachep, int limit,
3895 int batchcount, int shared, gfp_t gfp) 4100 int batchcount, int shared, gfp_t gfp)
3896{ 4101{
3897 struct ccupdate_struct *new; 4102 struct ccupdate_struct *new;
3898 int i; 4103 int i, this_cpu;
3899 4104
3900 new = kzalloc(sizeof(*new), gfp); 4105 new = kzalloc(sizeof(*new), gfp);
3901 if (!new) 4106 if (!new)
@@ -3913,7 +4118,7 @@ static int do_tune_cpucache(struct kmem_cache *cachep, int limit,
3913 } 4118 }
3914 new->cachep = cachep; 4119 new->cachep = cachep;
3915 4120
3916 on_each_cpu(do_ccupdate_local, (void *)new, 1); 4121 slab_on_each_cpu(do_ccupdate_local, (void *)new);
3917 4122
3918 check_irq_on(); 4123 check_irq_on();
3919 cachep->batchcount = batchcount; 4124 cachep->batchcount = batchcount;
@@ -3924,9 +4129,12 @@ static int do_tune_cpucache(struct kmem_cache *cachep, int limit,
3924 struct array_cache *ccold = new->new[i]; 4129 struct array_cache *ccold = new->new[i];
3925 if (!ccold) 4130 if (!ccold)
3926 continue; 4131 continue;
3927 spin_lock_irq(&cachep->nodelists[cpu_to_node(i)]->list_lock); 4132 slab_spin_lock_irq(&cachep->nodelists[cpu_to_node(i)]->list_lock,
3928 free_block(cachep, ccold->entry, ccold->avail, cpu_to_node(i)); 4133 this_cpu);
3929 spin_unlock_irq(&cachep->nodelists[cpu_to_node(i)]->list_lock); 4134 free_block(cachep, ccold->entry, ccold->avail, cpu_to_node(i),
4135 &this_cpu);
4136 slab_spin_unlock_irq(&cachep->nodelists[cpu_to_node(i)]->list_lock,
4137 this_cpu);
3930 kfree(ccold); 4138 kfree(ccold);
3931 } 4139 }
3932 kfree(new); 4140 kfree(new);
@@ -3991,29 +4199,31 @@ static int enable_cpucache(struct kmem_cache *cachep, gfp_t gfp)
3991 * Drain an array if it contains any elements taking the l3 lock only if 4199 * Drain an array if it contains any elements taking the l3 lock only if
3992 * necessary. Note that the l3 listlock also protects the array_cache 4200 * necessary. Note that the l3 listlock also protects the array_cache
3993 * if drain_array() is used on the shared array. 4201 * if drain_array() is used on the shared array.
4202 * returns non-zero if some work is done
3994 */ 4203 */
3995void drain_array(struct kmem_cache *cachep, struct kmem_list3 *l3, 4204int drain_array(struct kmem_cache *cachep, struct kmem_list3 *l3,
3996 struct array_cache *ac, int force, int node) 4205 struct array_cache *ac, int force, int node)
3997{ 4206{
3998 int tofree; 4207 int tofree, this_cpu;
3999 4208
4000 if (!ac || !ac->avail) 4209 if (!ac || !ac->avail)
4001 return; 4210 return 0;
4002 if (ac->touched && !force) { 4211 if (ac->touched && !force) {
4003 ac->touched = 0; 4212 ac->touched = 0;
4004 } else { 4213 } else {
4005 spin_lock_irq(&l3->list_lock); 4214 slab_spin_lock_irq(&l3->list_lock, this_cpu);
4006 if (ac->avail) { 4215 if (ac->avail) {
4007 tofree = force ? ac->avail : (ac->limit + 4) / 5; 4216 tofree = force ? ac->avail : (ac->limit + 4) / 5;
4008 if (tofree > ac->avail) 4217 if (tofree > ac->avail)
4009 tofree = (ac->avail + 1) / 2; 4218 tofree = (ac->avail + 1) / 2;
4010 free_block(cachep, ac->entry, tofree, node); 4219 free_block(cachep, ac->entry, tofree, node, &this_cpu);
4011 ac->avail -= tofree; 4220 ac->avail -= tofree;
4012 memmove(ac->entry, &(ac->entry[tofree]), 4221 memmove(ac->entry, &(ac->entry[tofree]),
4013 sizeof(void *) * ac->avail); 4222 sizeof(void *) * ac->avail);
4014 } 4223 }
4015 spin_unlock_irq(&l3->list_lock); 4224 slab_spin_unlock_irq(&l3->list_lock, this_cpu);
4016 } 4225 }
4226 return 1;
4017} 4227}
4018 4228
4019/** 4229/**
@@ -4030,10 +4240,11 @@ void drain_array(struct kmem_cache *cachep, struct kmem_list3 *l3,
4030 */ 4240 */
4031static void cache_reap(struct work_struct *w) 4241static void cache_reap(struct work_struct *w)
4032{ 4242{
4243 int this_cpu = raw_smp_processor_id(), node = cpu_to_node(this_cpu);
4033 struct kmem_cache *searchp; 4244 struct kmem_cache *searchp;
4034 struct kmem_list3 *l3; 4245 struct kmem_list3 *l3;
4035 int node = numa_node_id();
4036 struct delayed_work *work = to_delayed_work(w); 4246 struct delayed_work *work = to_delayed_work(w);
4247 int work_done = 0;
4037 4248
4038 if (!mutex_trylock(&cache_chain_mutex)) 4249 if (!mutex_trylock(&cache_chain_mutex))
4039 /* Give up. Setup the next iteration. */ 4250 /* Give up. Setup the next iteration. */
@@ -4049,9 +4260,12 @@ static void cache_reap(struct work_struct *w)
4049 */ 4260 */
4050 l3 = searchp->nodelists[node]; 4261 l3 = searchp->nodelists[node];
4051 4262
4052 reap_alien(searchp, l3); 4263 work_done += reap_alien(searchp, l3, &this_cpu);
4264
4265 node = cpu_to_node(this_cpu);
4053 4266
4054 drain_array(searchp, l3, cpu_cache_get(searchp), 0, node); 4267 work_done += drain_array(searchp, l3,
4268 cpu_cache_get(searchp, this_cpu), 0, node);
4055 4269
4056 /* 4270 /*
4057 * These are racy checks but it does not matter 4271 * These are racy checks but it does not matter
@@ -4062,7 +4276,7 @@ static void cache_reap(struct work_struct *w)
4062 4276
4063 l3->next_reap = jiffies + REAPTIMEOUT_LIST3; 4277 l3->next_reap = jiffies + REAPTIMEOUT_LIST3;
4064 4278
4065 drain_array(searchp, l3, l3->shared, 0, node); 4279 work_done += drain_array(searchp, l3, l3->shared, 0, node);
4066 4280
4067 if (l3->free_touched) 4281 if (l3->free_touched)
4068 l3->free_touched = 0; 4282 l3->free_touched = 0;
@@ -4081,7 +4295,8 @@ next:
4081 next_reap_node(); 4295 next_reap_node();
4082out: 4296out:
4083 /* Set up the next iteration */ 4297 /* Set up the next iteration */
4084 schedule_delayed_work(work, round_jiffies_relative(REAPTIMEOUT_CPUC)); 4298 schedule_delayed_work(work,
4299 round_jiffies_relative((1+!work_done) * REAPTIMEOUT_CPUC));
4085} 4300}
4086 4301
4087#ifdef CONFIG_SLABINFO 4302#ifdef CONFIG_SLABINFO
@@ -4140,7 +4355,7 @@ static int s_show(struct seq_file *m, void *p)
4140 unsigned long num_slabs, free_objects = 0, shared_avail = 0; 4355 unsigned long num_slabs, free_objects = 0, shared_avail = 0;
4141 const char *name; 4356 const char *name;
4142 char *error = NULL; 4357 char *error = NULL;
4143 int node; 4358 int this_cpu, node;
4144 struct kmem_list3 *l3; 4359 struct kmem_list3 *l3;
4145 4360
4146 active_objs = 0; 4361 active_objs = 0;
@@ -4151,7 +4366,7 @@ static int s_show(struct seq_file *m, void *p)
4151 continue; 4366 continue;
4152 4367
4153 check_irq_on(); 4368 check_irq_on();
4154 spin_lock_irq(&l3->list_lock); 4369 slab_spin_lock_irq(&l3->list_lock, this_cpu);
4155 4370
4156 list_for_each_entry(slabp, &l3->slabs_full, list) { 4371 list_for_each_entry(slabp, &l3->slabs_full, list) {
4157 if (slabp->inuse != cachep->num && !error) 4372 if (slabp->inuse != cachep->num && !error)
@@ -4176,7 +4391,7 @@ static int s_show(struct seq_file *m, void *p)
4176 if (l3->shared) 4391 if (l3->shared)
4177 shared_avail += l3->shared->avail; 4392 shared_avail += l3->shared->avail;
4178 4393
4179 spin_unlock_irq(&l3->list_lock); 4394 slab_spin_unlock_irq(&l3->list_lock, this_cpu);
4180 } 4395 }
4181 num_slabs += active_slabs; 4396 num_slabs += active_slabs;
4182 num_objs = num_slabs * cachep->num; 4397 num_objs = num_slabs * cachep->num;
@@ -4386,7 +4601,7 @@ static int leaks_show(struct seq_file *m, void *p)
4386 struct kmem_list3 *l3; 4601 struct kmem_list3 *l3;
4387 const char *name; 4602 const char *name;
4388 unsigned long *n = m->private; 4603 unsigned long *n = m->private;
4389 int node; 4604 int node, this_cpu;
4390 int i; 4605 int i;
4391 4606
4392 if (!(cachep->flags & SLAB_STORE_USER)) 4607 if (!(cachep->flags & SLAB_STORE_USER))
@@ -4404,13 +4619,13 @@ static int leaks_show(struct seq_file *m, void *p)
4404 continue; 4619 continue;
4405 4620
4406 check_irq_on(); 4621 check_irq_on();
4407 spin_lock_irq(&l3->list_lock); 4622 slab_spin_lock_irq(&l3->list_lock, this_cpu);
4408 4623
4409 list_for_each_entry(slabp, &l3->slabs_full, list) 4624 list_for_each_entry(slabp, &l3->slabs_full, list)
4410 handle_slab(n, cachep, slabp); 4625 handle_slab(n, cachep, slabp);
4411 list_for_each_entry(slabp, &l3->slabs_partial, list) 4626 list_for_each_entry(slabp, &l3->slabs_partial, list)
4412 handle_slab(n, cachep, slabp); 4627 handle_slab(n, cachep, slabp);
4413 spin_unlock_irq(&l3->list_lock); 4628 slab_spin_unlock_irq(&l3->list_lock, this_cpu);
4414 } 4629 }
4415 name = cachep->name; 4630 name = cachep->name;
4416 if (n[0] == n[1]) { 4631 if (n[0] == n[1]) {