]> www.infradead.org Git - users/hch/misc.git/commitdiff
genirq/migration: Use irqd_get_parent_data() in irq_force_complete_move()
authorThomas Gleixner <tglx@linutronix.de>
Fri, 4 Apr 2025 14:51:19 +0000 (16:51 +0200)
committerThomas Gleixner <tglx@linutronix.de>
Fri, 4 Apr 2025 15:08:36 +0000 (17:08 +0200)
Frank reported, that the common irq_force_complete_move() breaks the out of
tree build of ia64. The reason is that ia64 uses the migration code, but
does not have hierarchical interrupt domains enabled.

This went unnoticed in mainline as both x86 and RISC-V have hierarchical
domains enabled. Not that it matters for mainline, but it's still
inconsistent.

Use irqd_get_parent_data() instead of accessing the parent_data field
directly. The helper returns NULL when hierarchical domains are disabled
otherwise it accesses the parent_data field of the domain.

No functional change.

Fixes: 751dc837dabd ("genirq: Introduce common irq_force_complete_move() implementation")
Reported-by: Frank Scheiner <frank.scheiner@web.de>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Tested-by: Frank Scheiner <frank.scheiner@web.de>
Link: https://lore.kernel.org/all/87h634ugig.ffs@tglx
kernel/irq/migration.c

index 147cabb4c0779b977c21881a672bfbe5aaa2f338..f2b2929986ffa7c6557d31beaa5006949aea5c97 100644 (file)
@@ -37,7 +37,7 @@ bool irq_fixup_move_pending(struct irq_desc *desc, bool force_clear)
 
 void irq_force_complete_move(struct irq_desc *desc)
 {
-       for (struct irq_data *d = irq_desc_get_irq_data(desc); d; d = d->parent_data) {
+       for (struct irq_data *d = irq_desc_get_irq_data(desc); d; d = irqd_get_parent_data(d)) {
                if (d->chip && d->chip->irq_force_complete_move) {
                        d->chip->irq_force_complete_move(d);
                        return;