From: Frederic Weisbecker <fweis...@gmail.com> Disable a vector while it is being processed. This prepare for softirq re-entrancy with an obvious single constraint: a vector can't be interrupted by itself.
Signed-off-by: Frederic Weisbecker <fweis...@gmail.com> Cc: Ingo Molnar <mi...@kernel.org> Cc: Sebastian Andrzej Siewior <bige...@linutronix.de> Cc: Thomas Gleixner <t...@linutronix.de> Cc: Peter Zijlstra <pet...@infradead.org> Cc: Linus Torvalds <torva...@linux-foundation.org> Cc: David S. Miller <da...@davemloft.net> Cc: Mauro Carvalho Chehab <mche...@s-opensource.com> Cc: Paul E. McKenney <paul...@linux.vnet.ibm.com> --- kernel/softirq.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/kernel/softirq.c b/kernel/softirq.c index 3efa59e..457bf60 100644 --- a/kernel/softirq.c +++ b/kernel/softirq.c @@ -357,7 +357,10 @@ asmlinkage __visible void __softirq_entry __do_softirq(void) kstat_incr_softirqs_this_cpu(vec_nr); trace_softirq_entry(vec_nr); + softirq_enabled_nand(BIT(vec_nr)); + barrier(); h->action(h); + softirq_enabled_or(BIT(vec_nr)); trace_softirq_exit(vec_nr); if (unlikely(prev_count != preempt_count())) { pr_err("huh, entered softirq %u %s %p with preempt_count %08x, exited with %08x?\n", -- 2.7.4