[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <20210321114315.GA290313@gmail.com>
Date: Sun, 21 Mar 2021 12:43:15 +0100
From: Ingo Molnar <mingo@...nel.org>
To: Linus Torvalds <torvalds@...ux-foundation.org>
Cc: linux-kernel@...r.kernel.org, Thomas Gleixner <tglx@...utronix.de>,
Peter Zijlstra <a.p.zijlstra@...llo.nl>,
Borislav Petkov <bp@...en8.de>,
Andrew Morton <akpm@...ux-foundation.org>
Subject: [GIT PULL] IRQ updates & fixes
Linus,
Please pull the latest irq/urgent git tree from:
git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git irq-urgent-2021-03-21
# HEAD: 81e2073c175b887398e5bca6c004efa89983f58d genirq: Disable interrupts for force threaded handlers
A change to robustify force-threaded IRQ handlers to always disable interrupts,
plus a DocBook fix.
[ Note: the force-threaded IRQ handler change has been accelerated
from the normal schedule of such a change to keep the bad
pattern/workaround of spin_lock_irqsave() in handlers or
IRQF_NOTHREAD as a kludge from spreading. ]
Thanks,
Ingo
------------------>
Andy Shevchenko (1):
genirq/irq_sim: Fix typos in kernel doc (fnode -> fwnode)
Thomas Gleixner (1):
genirq: Disable interrupts for force threaded handlers
kernel/irq/irq_sim.c | 4 ++--
kernel/irq/manage.c | 4 ++++
2 files changed, 6 insertions(+), 2 deletions(-)
diff --git a/kernel/irq/irq_sim.c b/kernel/irq/irq_sim.c
index 48006608baf0..40880c350b95 100644
--- a/kernel/irq/irq_sim.c
+++ b/kernel/irq/irq_sim.c
@@ -159,7 +159,7 @@ static const struct irq_domain_ops irq_sim_domain_ops = {
* irq_domain_create_sim - Create a new interrupt simulator irq_domain and
* allocate a range of dummy interrupts.
*
- * @fnode: struct fwnode_handle to be associated with this domain.
+ * @fwnode: struct fwnode_handle to be associated with this domain.
* @num_irqs: Number of interrupts to allocate.
*
* On success: return a new irq_domain object.
@@ -228,7 +228,7 @@ static void devm_irq_domain_release_sim(struct device *dev, void *res)
* a managed device.
*
* @dev: Device to initialize the simulator object for.
- * @fnode: struct fwnode_handle to be associated with this domain.
+ * @fwnode: struct fwnode_handle to be associated with this domain.
* @num_irqs: Number of interrupts to allocate
*
* On success: return a new irq_domain object.
diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c
index dec3f73e8db9..21ea370fccda 100644
--- a/kernel/irq/manage.c
+++ b/kernel/irq/manage.c
@@ -1142,11 +1142,15 @@ irq_forced_thread_fn(struct irq_desc *desc, struct irqaction *action)
irqreturn_t ret;
local_bh_disable();
+ if (!IS_ENABLED(CONFIG_PREEMPT_RT))
+ local_irq_disable();
ret = action->thread_fn(action->irq, action->dev_id);
if (ret == IRQ_HANDLED)
atomic_inc(&desc->threads_handled);
irq_finalize_oneshot(desc, action);
+ if (!IS_ENABLED(CONFIG_PREEMPT_RT))
+ local_irq_enable();
local_bh_enable();
return ret;
}
Powered by blists - more mailing lists