aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBen Hutchings <ben@decadent.org.uk>2021-04-19 01:03:02 +0200
committerBen Hutchings <ben@decadent.org.uk>2021-04-19 01:03:02 +0200
commit43ef44387b44ac76b6b8107330f532451851148c (patch)
treeee7ba1d75f910285901c5c3f651385000b3066e1
parent399d67d5336a2cdb6f541c980201c1d8082d63cb (diff)
downloadlinux-stable-rt-v4.9-rt.tar.gz
genirq: Fix mis-merge of 4.9-stable changes with 4.9-rtv4.9-rt
The recent merge of genirq changes from 4.9-stable to 4.9-rt put the call to local_irq_enable() from irq_forced_thread_fn() in the wrong place, making it conditional on !irq_settings_no_softirq_call() as well as !IS_ENABLED(CONFIG_PREEMPT_RT_BASE). It also failed to add braces around the block, so that local_bh_enable() was always called, potentially in addition to _local_bh_enable(). This probably didn't matter in practice as no in-tree driver sets the IRQF_NO_SOFTIRQ_CALL flag. But let's make the conditional logic obviously correct. Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
-rw-r--r--kernel/irq/manage.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c
index 0b4b8be35db488..f18b89016e5f04 100644
--- a/kernel/irq/manage.c
+++ b/kernel/irq/manage.c
@@ -927,6 +927,8 @@ irq_forced_thread_fn(struct irq_desc *desc, struct irqaction *action)
atomic_inc(&desc->threads_handled);
irq_finalize_oneshot(desc, action);
+ if (!IS_ENABLED(CONFIG_PREEMPT_RT_BASE))
+ local_irq_enable();
/*
* Interrupts which have real time requirements can be set up
* to avoid softirq processing in the thread handler. This is
@@ -935,8 +937,6 @@ irq_forced_thread_fn(struct irq_desc *desc, struct irqaction *action)
if (irq_settings_no_softirq_call(desc))
_local_bh_enable();
else
- if (!IS_ENABLED(CONFIG_PREEMPT_RT_BASE))
- local_irq_enable();
local_bh_enable();
return ret;
}