Re: [patch 0/2] Run interrupt handlers always with interrupts disabled

Nicolas Pitre
2010-03-26T12:00:54Z

On Fri, 26 Mar 2010, Peter Zijlstra wrote:

> On Fri, 2010-03-26 at 09:59 +0000, Alan Cox wrote:
> > > As long as it's rare (which it is) i dont see a problem: you can enable
> > > interrupts in the handler by using local_irq_enable(), like the IDE PIO
> > > drivers do. That way it's documented a bit better as well, because it shows
> > > the precise source of the latency, with a big comment explaining it, etc.
> >
> > I don't think it's as rare as you think particularly in embedded, and the
> > moment you start explicitly using local_irq_enable() you've simply moved
> > the underlying problem back and made it far harder to grep for.
>
> We've got local_irq_enable_in_hardirq() which should be used and can
> easily be grep'ed for.
>
> But yes, I would much prefer to simply convert these known slow handlers
> to threaded interrupts.

Can't do that. The smc91x has a very small internal buffer which has to
be emptied using PIO. Threaded interrupts simply have too high
latencies for overruns not to occur. That's why the RX path is entirely
done in hardirq context while the TX path is done in softirq context.

Nicolas