Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=b811c202a0edadaac7242ab834fe7ba409978ae7
Commit:     b811c202a0edadaac7242ab834fe7ba409978ae7
Parent:     3e26c149c358529b1605f8959341d34bc4b880a3
Author:     Christoph Lameter <[EMAIL PROTECTED]>
AuthorDate: Tue Oct 16 23:25:51 2007 -0700
Committer:  Linus Torvalds <[EMAIL PROTECTED]>
CommitDate: Wed Oct 17 08:42:45 2007 -0700

    SLUB: simplify IRQ off handling
    
    Move irq handling out of new slab into __slab_alloc.  That is useful for
    Mathieu's cmpxchg_local patchset and also allows us to remove the crude
    local_irq_off in early_kmem_cache_alloc().
    
    Signed-off-by: Christoph Lameter <[EMAIL PROTECTED]>
    Signed-off-by: Andrew Morton <[EMAIL PROTECTED]>
    Signed-off-by: Linus Torvalds <[EMAIL PROTECTED]>
---
 mm/slub.c |   18 +++++++-----------
 1 files changed, 7 insertions(+), 11 deletions(-)

diff --git a/mm/slub.c b/mm/slub.c
index f426f9b..0f862fb 100644
--- a/mm/slub.c
+++ b/mm/slub.c
@@ -1085,9 +1085,6 @@ static struct page *new_slab(struct kmem_cache *s, gfp_t 
flags, int node)
 
        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)
@@ -1120,8 +1117,6 @@ static struct page *new_slab(struct kmem_cache *s, gfp_t 
flags, int node)
        page->freelist = start;
        page->inuse = 0;
 out:
-       if (flags & __GFP_WAIT)
-               local_irq_disable();
        return page;
 }
 
@@ -1505,7 +1500,14 @@ new_slab:
                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) {
@@ -2039,12 +2041,6 @@ static struct kmem_cache_node 
*early_kmem_cache_node_alloc(gfp_t gfpflags,
        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;
 }
 
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to