Ian Campbell
2004-11-08 16:31:11 UTC
Hi all,
I am seeing lots of instances of "irq27: nobody cared". This appears to
be because a second UART interrupt occurs while the serial8250_interrupt
is running, this interrupt is then delayed by the logic in do_edge_IRQ.
The first invocation of the interrupt handler deals with this second
interrupt before returning, at which point the delayed interrupt is
dispatched. However there is now no work to be done so
serial8250_interrupt returns IRQ_NONE.
My board has a PXA255 and an additional UART (an XR16C2852) on GPIO4
(IRQ27). The interrupt is configured as a rising edge interrupt although
the hardware pin is active high. This interrupt is not shared although I
do have CONFIG_SERIAL_8250_SHARE_IRQ enabled.
I am using the attached patch to add some debugging and this is what I
see:
unmask gpio 4
GEDR0 triggers interrrupt
ack gpio 4
serial8250_interrupt(27)...iir = c2...status = 60...THRE...GEDR0 triggers interrrupt
irq is already running. delay it
mask gpio 4
ack gpio 4
iir = c1...end: handled=1.
unmask gpio 4
serial8250_interrupt(27)...iir = c1...end: handled=0.
irq27: nobody cared
(snip stack trace etc)
handlers:
[<c010219c>] (serial8250_interrupt+0x0/0x184)
I happened to notice this when I was updating my board code to use a
platform device rather than arch-pxa/serial.h but I think that is a
coincidence. At the same time I also upgraded from 2.6.10-rc1-bk14 to
the latest -bk17 snapshot which I believe included a patch to make
serial8250_interrupt() properly return IRQ_NONE if it didn't do
anything. I think it is this change which has unmasked an existing
problem. However I'm not sure if the problem is with the board interrupt
configuration, the pxa interrupt handling or the serial code. Any ideas?
Thanks,
Ian.
I am seeing lots of instances of "irq27: nobody cared". This appears to
be because a second UART interrupt occurs while the serial8250_interrupt
is running, this interrupt is then delayed by the logic in do_edge_IRQ.
The first invocation of the interrupt handler deals with this second
interrupt before returning, at which point the delayed interrupt is
dispatched. However there is now no work to be done so
serial8250_interrupt returns IRQ_NONE.
My board has a PXA255 and an additional UART (an XR16C2852) on GPIO4
(IRQ27). The interrupt is configured as a rising edge interrupt although
the hardware pin is active high. This interrupt is not shared although I
do have CONFIG_SERIAL_8250_SHARE_IRQ enabled.
I am using the attached patch to add some debugging and this is what I
see:
unmask gpio 4
GEDR0 triggers interrrupt
ack gpio 4
serial8250_interrupt(27)...iir = c2...status = 60...THRE...GEDR0 triggers interrrupt
irq is already running. delay it
mask gpio 4
ack gpio 4
iir = c1...end: handled=1.
unmask gpio 4
serial8250_interrupt(27)...iir = c1...end: handled=0.
irq27: nobody cared
(snip stack trace etc)
handlers:
[<c010219c>] (serial8250_interrupt+0x0/0x184)
I happened to notice this when I was updating my board code to use a
platform device rather than arch-pxa/serial.h but I think that is a
coincidence. At the same time I also upgraded from 2.6.10-rc1-bk14 to
the latest -bk17 snapshot which I believe included a patch to make
serial8250_interrupt() properly return IRQ_NONE if it didn't do
anything. I think it is this change which has unmasked an existing
problem. However I'm not sure if the problem is with the board interrupt
configuration, the pxa interrupt handling or the serial code. Any ideas?
Thanks,
Ian.
--
Ian Campbell, Senior Design Engineer
Web: http://www.arcom.com
Arcom, Clifton Road, Direct: +44 (0)1223 403 465
Cambridge CB1 7EA, United Kingdom Phone: +44 (0)1223 411 200
Ian Campbell, Senior Design Engineer
Web: http://www.arcom.com
Arcom, Clifton Road, Direct: +44 (0)1223 403 465
Cambridge CB1 7EA, United Kingdom Phone: +44 (0)1223 411 200