[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <1360771932-27150-17-git-send-email-bigeasy@linutronix.de>
Date: Wed, 13 Feb 2013 17:12:11 +0100
From: Sebastian Andrzej Siewior <bigeasy@...utronix.de>
To: Steven Rostedt <rostedt@...dmis.org>
Cc: linux-kernel@...r.kernel.org, linux-rt-users@...r.kernel.org,
Carsten Emde <C.Emde@...dl.org>,
Thomas Gleixner <tglx@...utronix.de>,
Sebastian Andrzej Siewior <bigeasy@...utronix.de>
Subject: [PATCH 16/16] slub: Enable irqs for __GFP_WAIT
From: Thomas Gleixner <tglx@...utronix.de>
SYSTEM_RUNNING might be too late for enabling interrupts. Allocations
with GFP_WAIT can happen before that. So use this as an indicator.
Signed-off-by: Thomas Gleixner <tglx@...utronix.de>
[bigeasy@...utronix: fix !page conflict]
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@...utronix.de>
---
mm/slub.c | 13 +++++--------
1 file changed, 5 insertions(+), 8 deletions(-)
diff --git a/mm/slub.c b/mm/slub.c
index 8475580..4c62b7f 100644
--- a/mm/slub.c
+++ b/mm/slub.c
@@ -1285,14 +1285,15 @@ static struct page *allocate_slab(struct kmem_cache *s, gfp_t flags, int node)
struct page *page;
struct kmem_cache_order_objects oo = s->oo;
gfp_t alloc_gfp;
+ bool enableirqs;
flags &= gfp_allowed_mask;
+ enableirqs = (flags & __GFP_WAIT) != 0;
#ifdef CONFIG_PREEMPT_RT_FULL
- if (system_state == SYSTEM_RUNNING)
-#else
- if (flags & __GFP_WAIT)
+ enableirqs |= system_state == SYSTEM_RUNNING;
#endif
+ if (enableirqs)
local_irq_enable();
flags |= s->allocflags;
@@ -1316,11 +1317,7 @@ static struct page *allocate_slab(struct kmem_cache *s, gfp_t flags, int node)
stat(s, ORDER_FALLBACK);
}
-#ifdef CONFIG_PREEMPT_RT_FULL
- if (system_state == SYSTEM_RUNNING)
-#else
- if (flags & __GFP_WAIT)
-#endif
+ if (enableirqs)
local_irq_disable();
if (!page)
--
1.7.10.4
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists