diff options
author | Ben Hutchings <ben@decadent.org.uk> | 2021-04-19 01:03:02 +0200 |
---|---|---|
committer | Ben Hutchings <ben@decadent.org.uk> | 2021-04-19 01:03:02 +0200 |
commit | 43ef44387b44ac76b6b8107330f532451851148c (patch) | |
tree | ee7ba1d75f910285901c5c3f651385000b3066e1 | |
parent | 399d67d5336a2cdb6f541c980201c1d8082d63cb (diff) | |
download | linux-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.c | 4 |
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; } |