[PATCH v6 04/10] genirq: Introduce common irq_force_complete_move() implementation
Frank Scheiner
frank.scheiner at web.de
Thu Apr 3 06:13:17 PDT 2025
Hi there,
this change, specfically the introduction of irq_force_complete_move()
to `kernel/irq/migration.c`, strangely breaks our builds for the hp-sim
platform (i.e. Linux/ia64 for Ski):
```
CC kernel/irq/affinity.o
kernel/irq/migration.c: In function 'irq_force_complete_move':
kernel/irq/migration.c:40:72: error: 'struct irq_data' has no member named 'parent_data'
40 | for (struct irq_data *d = irq_desc_get_irq_data(desc); d; d = d->parent_data) {
| ^~
make[4]: *** [scripts/Makefile.build:207: kernel/irq/migration.o] Error 1
```
The reason seems to be that "d->parent_data" (i.e.
"irq_data.parent_data") is used unguarded in this function:
```
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) {
if (d->chip && d->chip->irq_force_complete_move) {
d->chip->irq_force_complete_move(d);
return;
}
}
}
```
...but "parent_data" is only present in `include/linux/irq.h` if
`CONFIG_IRQ_DOMAIN_HIERARCHY` was selected.
```
struct irq_data {
u32 mask;
unsigned int irq;
irq_hw_number_t hwirq;
struct irq_common_data *common;
struct irq_chip *chip;
struct irq_domain *domain;
#ifdef CONFIG_IRQ_DOMAIN_HIERARCHY
struct irq_data *parent_data;
#endif
void *chip_data;
};
```
So I guess, either the requirement in `linux/include/linux/irq.h` needs
to go, or the use of "d->parent_data" or the whole of
irq_force_complete_move() and its use needs to be guarded as well.
Cheers,
Frank
More information about the linux-riscv
mailing list