Re: Fwd: [RFC] IRQ type flags

Russell King
2005-11-07T18:10:20Z

On Mon, Nov 07, 2005 at 12:42:20PM +0000, Ben Dooks wrote:
> On Sun, Nov 06, 2005 at 08:40:12AM +0000, Russell King wrote:
> > I haven't had any feedback on this patch. akpm - can you add it to -mm
> > please? Here's the sign-off for it, thanks.
> >
> > Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
> >
> > ----- Forwarded message from Russell King <rmk+lkml@arm.linux.org.uk> -----
> > Date: Fri, 28 Oct 2005 22:57:47 +0100
> > From: Russell King <rmk+lkml@arm.linux.org.uk>
> > To: Linux Kernel List <linux-kernel@vger.kernel.org>
> > Subject: [RFC] IRQ type flags
> >
> > Hi,
> >
> > Some ARM platforms have the ability to program the interrupt controller
> > to detect various interrupt edges and/or levels. For some platforms,
> > this is critical to setup correctly, particularly those which the
> > setting is dependent on the device.
> >
> > Currently, ARM drivers do (eg) the following:
> >
> > err = request_irq(irq, ...);
> >
> > set_irq_type(irq, IRQT_RISING);
> >
> > However, if the interrupt has previously been programmed to be level
> > sensitive (for whatever reason) then this will cause an interrupt
> > storm.
>
> surely, thats the other way around, going from edge to level.

No. How can an edge triggered interrupt possibly cause a storm?

If the interrupt signal is at logic '0' and it was previously
configured for a low level to interrupt, when you call request_irq()
with your handler, the interrupt will be enabled.

Because it's level sensitive, it'll immediately interrupt, and
the handler will be invoked. When the handler returns, the interrupt
signal will still be at logic '0' so it's still active. So you
immediately get another interrupt and the handler will be re-invoked.
Repeat infinitely.

So it is exactly as I describe.

> How about making these compatible with the
> triggers compatible with the flags from
> include/linux/ioport.h definitions for the
> IRQ resource (IORESOURCE_IRQ_*).

We could do, but I took the set_irq_type() implementation. 8) We
could change both to conform.