interrupt handlers in -current

M. Warner Losh imp at bsdimp.com
Thu Jun 5 16:01:52 PDT 2003


In message: <XFMail.20030605220236.dmlb at dmlb.org>
            Duncan Barclay <dmlb at dmlb.org> writes:
: This is more of a confirmation of my understanding than anything else.
: In -current, should an interrupt thread be created you set up an interrupt
: handler? If so, then I'd better check my code because I haven't got one!

No.  Just because we handle interrupts in a thread doesn't mean client
devices need to create a thread.  The thread is creted automatically
and the routine passed to bus_setup_intr() is then called when an
interrupt happens.

You can create threads, taskqueues and other things, but those aren't
required.

: If a PCI device generates an interrupt and there is no handler does the
: kernel report a stary interrupt?

You'll likely see an interrupt storm.  Since the PCI device generates
a level interrupt, the ISRs are run and the level interrupt is still
high, so another interrupt is generated, etc.  on 4.x this was fatal,
but on 5.x the system can continue to run in a degraded manner.

: -current for me is 5.1-BETA1 and I'm doing a driver for the BCM 4401 NIC.
: I'm transmitting packets but my handler isn't being called to clean up the
: DMA.

So you are doing bus_setup_intr() and that routine is never called?
What does vmstat say?  I'd expect to see something like:

% vmstat -i
uhci0 irq10                   26083          1
# cause the interrupt to happen
% vmstat -i
uhci0 irq10                   26026083     2683
# eg, a huge number all of a sudden

(all[*] irq 10's are reported on the uhci device in vmstat, so don't
let that get you confused).

It may also be the case that the interrupt for this isn't being
properly routed.  5.1-BETA has a bug that, for some laptop machines,
interrupts aren't properly routed.  5.1-RELEASE has fixed this.

Warner


More information about the freebsd-hackers mailing list