BUG_ON(flags & GFP_SLAB_BUG_MASK);
 
-       if (flags & __GFP_WAIT)
-               local_irq_enable();
-
        page = allocate_slab(s,
                flags & (GFP_RECLAIM_MASK | GFP_CONSTRAINT_MASK), node);
        if (!page)
        page->freelist = start;
        page->inuse = 0;
 out:
-       if (flags & __GFP_WAIT)
-               local_irq_disable();
        return page;
 }
 
                goto load_freelist;
        }
 
+       if (gfpflags & __GFP_WAIT)
+               local_irq_enable();
+
        new = new_slab(s, gfpflags, node);
+
+       if (gfpflags & __GFP_WAIT)
+               local_irq_disable();
+
        if (new) {
                c = get_cpu_slab(s, smp_processor_id());
                if (c->page) {
        init_kmem_cache_node(n);
        atomic_long_inc(&n->nr_slabs);
        add_partial(n, page);
-
-       /*
-        * new_slab() disables interupts. If we do not reenable interrupts here
-        * then bootup would continue with interrupts disabled.
-        */
-       local_irq_enable();
        return n;
 }