summaryrefslogtreecommitdiffstats
path: root/debian/patches-rt/0340-genirq-Add-lost-hunk-to-irq_forced_thread_fn.patch
diff options
context:
space:
mode:
Diffstat (limited to 'debian/patches-rt/0340-genirq-Add-lost-hunk-to-irq_forced_thread_fn.patch')
-rw-r--r--debian/patches-rt/0340-genirq-Add-lost-hunk-to-irq_forced_thread_fn.patch37
1 files changed, 37 insertions, 0 deletions
diff --git a/debian/patches-rt/0340-genirq-Add-lost-hunk-to-irq_forced_thread_fn.patch b/debian/patches-rt/0340-genirq-Add-lost-hunk-to-irq_forced_thread_fn.patch
new file mode 100644
index 000000000..7297c027c
--- /dev/null
+++ b/debian/patches-rt/0340-genirq-Add-lost-hunk-to-irq_forced_thread_fn.patch
@@ -0,0 +1,37 @@
+From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+Date: Fri, 29 Apr 2022 11:02:18 -0500
+Subject: [PATCH 340/342] 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=d872802a6e9cfbe98d85409cd78d88b6ea9ffc51
+
+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;
+ }
+