Merge branch 'irq/urgent' into irq/drivers

Pick up fixes so subsequent changes apply.
This commit is contained in:
Thomas Gleixner 2026-06-03 18:03:48 +02:00
commit 0ed645812f
4 changed files with 13 additions and 4 deletions

View File

@ -24,7 +24,7 @@
#define IRQ_IN_COMBINER 8
static DEFINE_SPINLOCK(irq_controller_lock);
static DEFINE_RAW_SPINLOCK(irq_controller_lock);
struct combiner_chip_data {
unsigned int hwirq_offset;
@ -72,9 +72,9 @@ static void combiner_handle_cascade_irq(struct irq_desc *desc)
chained_irq_enter(chip, desc);
spin_lock(&irq_controller_lock);
raw_spin_lock(&irq_controller_lock);
status = readl_relaxed(chip_data->base + COMBINER_INT_STATUS);
spin_unlock(&irq_controller_lock);
raw_spin_unlock(&irq_controller_lock);
status &= chip_data->irq_mask;
if (status == 0)

View File

@ -265,7 +265,7 @@ static int rzt2h_icu_init(struct platform_device *pdev, struct device_node *pare
irq_domain = irq_domain_create_hierarchy(parent_domain, 0, RZT2H_ICU_NUM_IRQ,
dev_fwnode(dev), &rzt2h_icu_domain_ops, priv);
if (!irq_domain) {
pm_runtime_put(dev);
pm_runtime_put_sync(dev);
return -ENOMEM;
}

View File

@ -158,6 +158,8 @@ static int imsic_dying_cpu(unsigned int cpu)
/* Cleanup IPIs */
imsic_ipi_dying_cpu();
imsic_local_sync_all(false);
/* Mark per-CPU IMSIC state as offline */
imsic_state_offline();

View File

@ -292,6 +292,12 @@ void irq_work_sync(struct irq_work *work)
!arch_irq_work_has_interrupt()) {
rcuwait_wait_event(&work->irqwait, !irq_work_is_busy(work),
TASK_UNINTERRUPTIBLE);
/*
* Ensure irq_work_single() does not access @work
* after removing IRQ_WORK_BUSY. It is always
* accessed within a RCU-read section.
*/
synchronize_rcu();
return;
}
@ -302,6 +308,7 @@ EXPORT_SYMBOL_GPL(irq_work_sync);
static void run_irq_workd(unsigned int cpu)
{
guard(rcu)();
irq_work_run_list(this_cpu_ptr(&lazy_list));
}