Re: [PATCH] genirq: Consider domain hierarchy when checking for IRQCHIP_ONESHOT_SAFE

From: Thomas Gleixner
Date: Fri Aug 03 2018 - 16:01:04 EST


On Fri, 3 Aug 2018, Heiner Kallweit wrote:

> In case of a domain hierarchy we may miss the IRQCHIP_ONESHOT_SAFE
> flag because we look at top of the stack only. See also discussion
> here: https://marc.info/?l=linux-kernel&m=153301773524685&w=2

I think you misunderstood:

> I think the top most chip is the key, the rest of the hierarchy is
> irrelevant because the top most chip is the one which is responsible for
> not creating an interrupt storm after the interrupt got acknowledged.

The top most chip in the hierarchy, e.g. the PCI MSI one, is the key. If
that one is badly implemented and starts to resend after ack/eoi then the
interrupt storm happens. The lower layers in the hierarchy down to the
vector domain are just transporting what the top level chip does. So it is
actively wrong to flag the lower layers.

if (desc->irq_data.chip->flags & IRQCHIP_ONESHOT_SAFE)

is the correct check as it looks at the topmost irq chip which is the one
which initiates the interrupt.

Thanks,

tglx