Messages in this thread Patch in this message | | | From | Frederic Weisbecker <> | Subject | [RFC PATCH 28/30] softirq: Disable vector on execution | Date | Thu, 11 Oct 2018 01:12:15 +0200 |
| |
From: Frederic Weisbecker <fweisbec@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 <fweisbec@gmail.com> Cc: Ingo Molnar <mingo@kernel.org> Cc: Sebastian Andrzej Siewior <bigeasy@linutronix.de> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: David S. Miller <davem@davemloft.net> Cc: Mauro Carvalho Chehab <mchehab@s-opensource.com> Cc: Paul E. McKenney <paulmck@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
| |