[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>
This commit is contained in:
Родитель
57a4f91ae5
Коммит
62918a0361
|
@ -1146,7 +1146,7 @@ static inline int cache_free_alien(struct kmem_cache *cachep, void *objp)
|
|||
* Make sure we are not freeing a object from another node to the array
|
||||
* cache on this cpu.
|
||||
*/
|
||||
if (likely(slabp->nodeid == node) || unlikely(!use_alien_caches))
|
||||
if (likely(slabp->nodeid == node))
|
||||
return 0;
|
||||
|
||||
l3 = cachep->nodelists[node];
|
||||
|
@ -1394,6 +1394,9 @@ void __init kmem_cache_init(void)
|
|||
int order;
|
||||
int node;
|
||||
|
||||
if (num_possible_nodes() == 1)
|
||||
use_alien_caches = 0;
|
||||
|
||||
for (i = 0; i < NUM_INIT_LISTS; i++) {
|
||||
kmem_list3_init(&initkmem_list3[i]);
|
||||
if (i < MAX_NUMNODES)
|
||||
|
@ -3563,7 +3566,7 @@ static inline void __cache_free(struct kmem_cache *cachep, void *objp)
|
|||
check_irq_off();
|
||||
objp = cache_free_debugcheck(cachep, objp, __builtin_return_address(0));
|
||||
|
||||
if (cache_free_alien(cachep, objp))
|
||||
if (use_alien_caches && cache_free_alien(cachep, objp))
|
||||
return;
|
||||
|
||||
if (likely(ac->avail < ac->limit)) {
|
||||
|
|
Загрузка…
Ссылка в новой задаче