Posting this for someone else. Please reply to him (adonovan) not me.
Hello everyone. I am developing a driver for a custom bit of PCI
hardware for an x86 PC. The device uses an interrupt, but my driver's
handler is not being called when the interrupt is active.
I can scope the lines on the card and on the motherboard, and it shows
that the PCI INTA# line is indeed being asserted (pulled low) when it
should be. I would expect that this should cause my interrupt handler
to be called, but it never is. My handler calls printk, and the
message is never found on the log (and yes, syslog.conf is all set up
fine). /proc/interrupts reports a figure of zero for the kirq_stat
field (number of times it has been called) for my interrupt, so it
seems the kernel does not believe my interrupt is being called either.
What I expect is that it should repeatedly call my interrupt handler
until the cause of the interrupt has been cleared. In fact, I have seen
it do this in the past so I am surprised that it does not now.
Other things of note:
- request_irq returns successfully; my interrupt is listed
- enable_irq does nothing as the interrupt is already enabled (in fact
I get an "unbalanced" warning).
- I have tried temporarily removing all refs to cli/sti.
- I have tried using different physical PCI slots, as I remember
something about INTA#, INTB# etc lines being rotated from slot to slot
to balance the interrupt lines.
None of these has made any difference.
I am about to rebuild the kernel with some additional diagnostics in
the do_none "unhandled" interrupt handler and other places to see if I
can see my interrupt arriving.
Can anyone suggest what might be causing the asserted INTA# line not to
invoke my handler?
Many thanks in advance,
PS. I would be very grateful if you could copy me by mail
to read the group but because I am working at another company's site
and have no easy access to a news server.