aboutsummaryrefslogtreecommitdiffstats
path: root/mm
diff options
context:
space:
mode:
authorSiddha, Suresh B <suresh.b.siddha@intel.com>2007-05-02 13:27:18 -0400
committerAndi Kleen <andi@basil.nowhere.org>2007-05-02 13:27:18 -0400
commit62918a036148230ba1ad175dc8a0952e3752ac57 (patch)
treebc58159f2498c1b29e7a46a3e8f1bb1751a0ab59 /mm
parent57a4f91ae5571edd7c0428285d8df16bb8bf5f40 (diff)
[PATCH] x86-64: skip cache_free_alien() on non NUMA
Set use_alien_caches to 0 on non NUMA platforms. And avoid calling the cache_free_alien() when use_alien_caches is not set. This will avoid the cache miss that happens while dereferencing slabp to get nodeid. Signed-off-by: Suresh Siddha <suresh.b.siddha@intel.com> Signed-off-by: Andi Kleen <ak@suse.de> Cc: Andi Kleen <andi@firstfloor.org> Cc: Eric Dumazet <dada1@cosmosbay.com> Cc: David Rientjes <rientjes@google.com> Cc: Christoph Lameter <clameter@engr.sgi.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Diffstat (limited to 'mm')
-rw-r--r--mm/slab.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/mm/slab.c b/mm/slab.c
index 4cbac24ae2f1..168bfe9d8ffe 100644
--- a/mm/slab.c
+++ b/mm/slab.c
@@ -1146,7 +1146,7 @@ static inline int cache_free_alien(struct kmem_cache *cachep, void *objp)
1146 * Make sure we are not freeing a object from another node to the array 1146 * Make sure we are not freeing a object from another node to the array
1147 * cache on this cpu. 1147 * cache on this cpu.
1148 */ 1148 */
1149 if (likely(slabp->nodeid == node) || unlikely(!use_alien_caches)) 1149 if (likely(slabp->nodeid == node))
1150 return 0; 1150 return 0;
1151 1151
1152 l3 = cachep->nodelists[node]; 1152 l3 = cachep->nodelists[node];
@@ -1394,6 +1394,9 @@ void __init kmem_cache_init(void)
1394 int order; 1394 int order;
1395 int node; 1395 int node;
1396 1396
1397 if (num_possible_nodes() == 1)
1398 use_alien_caches = 0;
1399
1397 for (i = 0; i < NUM_INIT_LISTS; i++) { 1400 for (i = 0; i < NUM_INIT_LISTS; i++) {
1398 kmem_list3_init(&initkmem_list3[i]); 1401 kmem_list3_init(&initkmem_list3[i]);
1399 if (i < MAX_NUMNODES) 1402 if (i < MAX_NUMNODES)
@@ -3563,7 +3566,7 @@ static inline void __cache_free(struct kmem_cache *cachep, void *objp)
3563 check_irq_off(); 3566 check_irq_off();
3564 objp = cache_free_debugcheck(cachep, objp, __builtin_return_address(0)); 3567 objp = cache_free_debugcheck(cachep, objp, __builtin_return_address(0));
3565 3568
3566 if (cache_free_alien(cachep, objp)) 3569 if (use_alien_caches && cache_free_alien(cachep, objp))
3567 return; 3570 return;
3568 3571
3569 if (likely(ac->avail < ac->limit)) { 3572 if (likely(ac->avail < ac->limit)) {