On Mon, May 02, 2005 at 01:57:28PM +0100, Mark Broadbent wrote:
>
> > However, I don't see how this can happen. __do_IRQ ensures
> > that the handlers on a single IRQ aren't reentered by desc->lock
> > and desc->status. Softirqs are also kept out by irq_enter. Am
> > I missing something?
>
> As far as I can see desc->lock is dropped before handle_IRQ_event() is
> called in __do_IRQ() (kernel/irq/handle.c:170) and desc->status does not
> prevent the execution of the IRQ handler. Same with softirqs,
desc->status is set to IRQ_INPROGRESS (kernel/irq/handle.c:144) which
prevents the same IRQ handlers from being invoked again
(kernel/irq/handle.c:141).
> interrupts are enabled when the handler is called (kernel/softirq.c:89).
Soft IRQs do not run when we're in an IRQ handler (kernel/softirq.c:121).
Cheers,
--
Visit Openswan at http://www.openswan.org/
Email: Herbert Xu ~{PmV>HI~} <herbert@xxxxxxxxxxxxxxxxxxx>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt
|