IRQ Question?

Nate Lawson nate at root.org
Thu Apr 19 02:26:41 UTC 2007


> FreeBSD 7.0-CURRENT #0: Tue Apr 10 13:47:53 WST 2007
> 
> Could be an insanely dumb question, however, I have to ask.
> 
> Why don't IRQs in the BIOS map to IRQs in the output of vmstat(8) ?
> 
> e.g.
> 
> I manually changed an IRQ assingment of an Intel NIC [em(4)] to be on IRQ 11 in
> the BIOS and vmstat(8) reports its as irq16.
> 
>   #vmstat -i | egrep -i em
>    irq16: em0 uhci0  2990236  18
> 
> Can someone (njl@ jhb@) please enlighten me ?

Interrupt routing is determined by a number of factors.  Without acpi,
it's determined by the BIOS initial irq and then anything the $PIR table
changes (usually matches the BIOS value).  With acpi, it's the BIOS irq
and MADT acpi table.  And that assumes APIC, not PIC-based routing.

You can override the values with these tunables from the acpi man page:

     hw.pci.link.%s.%d.irq
       Override the interrupt to use for this link and index.  This
       capability should be used carefully, and only if a device is not
       working with acpi enabled.  "%s" is the name of the link (e.g.,
       LNKA).  "%d" is the resource index when the link supports multi-
       ple IRQs.  Most PCI links only have one IRQ resource, so the
       below form should be used.

     hw.pci.link.%s.irq
       Override the interrupt to use.  This capability should be used
       carefully, and only if a device is not working with acpi enabled.
       "%s" is the name of the link (e.g., LNKA).

You'll have to look at your dmesg to determine the proper values here.

-- 
Nate


More information about the freebsd-current mailing list