Message ID | 20220524032847.3244853-1-zhanggenjian@kylinos.cn (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | [v2] gpio: vr41xx: Use spurious_interrupt() and export it to modules | expand |
On 5/23/22 20:28, Genjian Zhang wrote: > From: huhai <huhai@kylinos.cn> > > modpost complains once these drivers become modules. > ERROR: modpost: "irq_err_count" [drivers/gpio/gpio-vr41xx.ko] undefined! > > Fix it by use spurious_interrupt() and export spurious_interrupt() when > that symbol is =m. > > Fixes: 27fdd325dace ("MIPS: Update VR41xx GPIO driver to use gpiolib") > Suggested-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de> > Reported-by: k2ci <kernel-bot@kylinos.cn> > Signed-off-by: huhai <huhai@kylinos.cn> > --- > arch/mips/kernel/irq.c | 3 +++ > drivers/gpio/gpio-vr41xx.c | 2 +- > 2 files changed, 4 insertions(+), 1 deletion(-) > > diff --git a/arch/mips/kernel/irq.c b/arch/mips/kernel/irq.c > index 5e11582fe308..69f9a46bf9e5 100644 > --- a/arch/mips/kernel/irq.c > +++ b/arch/mips/kernel/irq.c > @@ -49,6 +49,9 @@ asmlinkage void spurious_interrupt(void) > { > atomic_inc(&irq_err_count); > } > +#ifdef CONFIG_GPIO_VR41XX_MODULE > +EXPORT_SYMBOL_GPL(spurious_interrupt); > +#endif You should not be exporting for just a specific configuration, export it unconditionally. The generic IRQ layer however prefers to use handle_bad_irq() which is already exported, can you consider using that?
diff --git a/arch/mips/kernel/irq.c b/arch/mips/kernel/irq.c index 5e11582fe308..69f9a46bf9e5 100644 --- a/arch/mips/kernel/irq.c +++ b/arch/mips/kernel/irq.c @@ -49,6 +49,9 @@ asmlinkage void spurious_interrupt(void) { atomic_inc(&irq_err_count); } +#ifdef CONFIG_GPIO_VR41XX_MODULE +EXPORT_SYMBOL_GPL(spurious_interrupt); +#endif void __init init_IRQ(void) { diff --git a/drivers/gpio/gpio-vr41xx.c b/drivers/gpio/gpio-vr41xx.c index 98cd715ccc33..8f27a0e0ad99 100644 --- a/drivers/gpio/gpio-vr41xx.c +++ b/drivers/gpio/gpio-vr41xx.c @@ -217,7 +217,7 @@ static int giu_get_irq(unsigned int irq) printk(KERN_ERR "spurious GIU interrupt: %04x(%04x),%04x(%04x)\n", maskl, pendl, maskh, pendh); - atomic_inc(&irq_err_count); + spurious_interrupt(); return -EINVAL; }