summaryrefslogtreecommitdiffstats
path: root/debian/patches-rt/0340-genirq-Add-lost-hunk-to-irq_forced_thread_fn.patch
blob: 79cb1f56839b69f9bff807bb89bc084dc3766a26 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Date: Fri, 29 Apr 2022 11:02:18 -0500
Subject: [PATCH 340/353] genirq: Add lost hunk to irq_forced_thread_fn().
Origin: https://git.kernel.org/cgit/linux/kernel/git/rt/linux-stable-rt.git/commit?id=34d634d46859857fa7d866a0b8e4f98e0a5b2a1a

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>
Signed-off-by: Clark Williams <williams@redhat.com>
---
 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 683debac6759..6ee6d144060f 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;
 }