Interrupt handler not being called.

Interrupt handler not being called.

Post by Ian Collinso » Sat, 20 May 2000 04:00:00

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
in /proc/interrupts.
- 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.


1. driver: interrupt handler not getting called

Into the last leg of my driver saga, I hope.

I think i've got everything set up for basic operation.  DMA allocated,
all that stuff.
My attach routine calls

        ddi_add_intr(dip, 0, NULL, 0, hpt_handle_intr, (caddr_t) softstate);

and my strategy func sets the device registers. I do a read of the status
regs immediately after supposedly starting a transfer.
It shows as "busy", and the error flag is clear...

So why does my interrupt routine never get called?

I have a cmn_err() as the first thing in hpt_handle_intr, but I never
see a message, and the dd to my device hangs.

Any ideas, folks?

[Trim the no-bots from my address to reply to me by email!]
[ Do NOT email-CC me on posts. Pick one or the other.]

The word of the day is mispergitude

2. good SCSI card for Linux?

3. interrupt handler not being called .

4. Working in the industry

5. interrupt handler not called ( continued )

6. Best laptop ($3.5-$5K US) to run Linux + Xfree86

7. interrupt handler not being called .

8. Q.unallocated sectors and invalid flag

9. Threads performance - allow signal handler to not call handler

10. can I not get the value of a global variable in an interrupt handler?

11. Reentrant system calls (can be called from signal handler)

12. Handlers, Handlers, Handlers

13. Calling semop() after signal interrupts blocking semop() call