summaryrefslogtreecommitdiffstats
path: root/debian/patches-rt/0346-genirq-Add-lost-hunk-to-irq_forced_thread_fn.patch
blob: 0c8b0e14edc7d6ee4d283e63b2a27af8094c55b3 (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
38
39
40
41
From d379a82e852964afe457dcf44bf4a00fc59de389 Mon Sep 17 00:00:00 2001
From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
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 <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 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