[PATCH kernel v3] powerpc/xive: Drop deregistered irqs
Cédric Le Goater
clg at kaod.org
Sat Jul 27 18:20:53 AEST 2019
Hello Alexey,
>> --- a/arch/powerpc/kernel/irq.c
>> +++ b/arch/powerpc/kernel/irq.c
>> @@ -632,10 +632,13 @@ void __do_irq(struct pt_regs *regs)
>> may_hard_irq_enable();
>> /* And finally process it */
>> - if (unlikely(!irq))
>> + if (unlikely(!irq)) {
>> __this_cpu_inc(irq_stat.spurious_irqs);
>> - else
>> - generic_handle_irq(irq);
>> + } else if (generic_handle_irq(irq)) {
>> + if (ppc_md.orphan_irq)
>> + ppc_md.orphan_irq(irq);
>> + __this_cpu_inc(irq_stat.spurious_irqs);
>> + }
I think we still have an issue here.
The fix is relying on the fact that generic_handle_irq() will return
EINVAL if irq desc is NULL, and if this is the case the top interrupt
handler will consider we have an orphan interrupt.
But, we could also be in the middle of irq_domain->map() and have a
partially initialized descriptor if the same interrupt is being remapped
on a CPU while another is trying to handle orphans.
Calling can_request_irq() (which checks the IRQ_NOREQUEST flag) should
close that window and it would be clearer than relying on the return value
of generic_handle_irq().
C.
More information about the Linuxppc-dev
mailing list