@@ -998,7 +998,15 @@ irq_forced_thread_fn(struct irq_desc *desc, struct irqaction *action)
irq_finalize_oneshot(desc, action);
if (!IS_ENABLED(CONFIG_PREEMPT_RT_BASE))
local_irq_enable();
- local_bh_enable();
+ /*
+ * Interrupts which have real time requirements can be set up
+ * to avoid softirq processing in the thread handler. This is
+ * safe as these interrupts do not raise soft interrupts.
+ */
+ if (irq_settings_no_softirq_call(desc))
+ _local_bh_enable();
+ else
+ local_bh_enable();
return ret;
}
The irq_settings_no_softirq_call() related handling got lost in process, here are the missing bits. Reported-by: Martin Kaistra <martin.kaistra@linutronix.de> Fixes: b0cf5c230e2a0 ("Merge tag 'v4.19.183' into linux-4.19.y-rt") Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> --- The irq_settings_no_softirq_call() related bits were removed in v5.0.21-rt13. All previous kernel version should keep it. kernel/irq/manage.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-)