diff options
author | Siddha, Suresh B <suresh.b.siddha@intel.com> | 2007-05-02 13:27:18 -0400 |
---|---|---|
committer | Andi Kleen <andi@basil.nowhere.org> | 2007-05-02 13:27:18 -0400 |
commit | 62918a036148230ba1ad175dc8a0952e3752ac57 (patch) | |
tree | bc58159f2498c1b29e7a46a3e8f1bb1751a0ab59 | |
parent | 57a4f91ae5571edd7c0428285d8df16bb8bf5f40 (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>
-rw-r--r-- | mm/slab.c | 7 |
1 files changed, 5 insertions, 2 deletions
@@ -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)) { |