Move the interrupt check from slab_node into ___cache_alloc and adds an
"unlikely()" to avoid pipeline stalls on some architectures.
Signed-off-by: Christoph Lameter <clameter@sgi.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
  */
 unsigned slab_node(struct mempolicy *policy)
 {
-       if (in_interrupt())
-               return numa_node_id();
-
        switch (policy->policy) {
        case MPOL_INTERLEAVE:
                return interleave_nodes(policy);
 
        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())