Skip to content

Commit 5ee96fa

Browse files
committed
Merge tag 'irq-urgent-2021-03-21' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull irq fix from Ingo Molnar: "A change to robustify force-threaded IRQ handlers to always disable interrupts, plus a DocBook fix. 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" * tag 'irq-urgent-2021-03-21' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: genirq: Disable interrupts for force threaded handlers genirq/irq_sim: Fix typos in kernel doc (fnode -> fwnode)
2 parents 1c74516 + 81e2073 commit 5ee96fa

File tree

2 files changed

+6
-2
lines changed

2 files changed

+6
-2
lines changed

kernel/irq/irq_sim.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@ static const struct irq_domain_ops irq_sim_domain_ops = {
159159
* irq_domain_create_sim - Create a new interrupt simulator irq_domain and
160160
* allocate a range of dummy interrupts.
161161
*
162-
* @fnode: struct fwnode_handle to be associated with this domain.
162+
* @fwnode: struct fwnode_handle to be associated with this domain.
163163
* @num_irqs: Number of interrupts to allocate.
164164
*
165165
* On success: return a new irq_domain object.
@@ -228,7 +228,7 @@ static void devm_irq_domain_release_sim(struct device *dev, void *res)
228228
* a managed device.
229229
*
230230
* @dev: Device to initialize the simulator object for.
231-
* @fnode: struct fwnode_handle to be associated with this domain.
231+
* @fwnode: struct fwnode_handle to be associated with this domain.
232232
* @num_irqs: Number of interrupts to allocate
233233
*
234234
* On success: return a new irq_domain object.

kernel/irq/manage.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1142,11 +1142,15 @@ irq_forced_thread_fn(struct irq_desc *desc, struct irqaction *action)
11421142
irqreturn_t ret;
11431143

11441144
local_bh_disable();
1145+
if (!IS_ENABLED(CONFIG_PREEMPT_RT))
1146+
local_irq_disable();
11451147
ret = action->thread_fn(action->irq, action->dev_id);
11461148
if (ret == IRQ_HANDLED)
11471149
atomic_inc(&desc->threads_handled);
11481150

11491151
irq_finalize_oneshot(desc, action);
1152+
if (!IS_ENABLED(CONFIG_PREEMPT_RT))
1153+
local_irq_enable();
11501154
local_bh_enable();
11511155
return ret;
11521156
}

0 commit comments

Comments
 (0)