Index: linux-2.6.15-rc1-mm2/mm/slab.c =================================================================== --- linux-2.6.15-rc1-mm2.orig/mm/slab.c 2005-11-18 12:35:59.000000000 -0800 +++ linux-2.6.15-rc1-mm2/mm/slab.c 2005-11-21 10:51:03.000000000 -0800 @@ -2542,7 +2542,7 @@ static inline void *____cache_alloc(kmem struct array_cache *ac; #ifdef CONFIG_NUMA - if (current->mempolicy) { + if (unlikely(current->mempolicy && !in_interrupt())) { int nid = slab_node(current->mempolicy); if (nid != numa_node_id()) Index: linux-2.6.15-rc1-mm2/mm/mempolicy.c =================================================================== --- linux-2.6.15-rc1-mm2.orig/mm/mempolicy.c 2005-11-18 12:35:59.000000000 -0800 +++ linux-2.6.15-rc1-mm2/mm/mempolicy.c 2005-11-21 10:51:46.000000000 -0800 @@ -998,9 +998,6 @@ static unsigned interleave_nodes(struct */ unsigned slab_node(struct mempolicy *policy) { - if (in_interrupt()) - return numa_node_id(); - switch (policy->policy) { case MPOL_INTERLEAVE: return interleave_nodes(policy);