From d379a82e852964afe457dcf44bf4a00fc59de389 Mon Sep 17 00:00:00 2001 From: Sebastian Andrzej Siewior Date: Fri, 29 Apr 2022 11:02:18 -0500 Subject: [PATCH 346/347] genirq: Add lost hunk to irq_forced_thread_fn(). Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.19/older/patches-4.19.246-rt110.tar.xz The irq_settings_no_softirq_call() related handling got lost in process, here are the missing bits. Reported-by: Martin Kaistra Fixes: b0cf5c230e2a0 ("Merge tag 'v4.19.183' into linux-4.19.y-rt") Signed-off-by: Sebastian Andrzej Siewior Signed-off-by: Clark Williams --- kernel/irq/manage.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c index 6c88d81399dd..8f710f1755d8 100644 --- a/kernel/irq/manage.c +++ b/kernel/irq/manage.c @@ -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; } -- 2.36.1