Interrupt Storms on irq:11 with Tecra A4
John Baldwin
jhb at freebsd.org
Wed Aug 2 15:02:02 UTC 2006
On Wednesday 02 August 2006 01:56, Yousef Raffah wrote:
> Updating to (7.0-CURRENT #1: Mon Jul 17 20:06:47 AST 2006) has a working
> acpi on my laptop but the interrupt storm is still there. I have included
> below a verbose dmesg with acpi enabled as per your request. I would really
> appreciate any help you can offer :)
>
> pci_link6: Links after initial probe:
> Index IRQ Rtd Ref IRQs
> 0 11 N 0 6
> pci_link6: Links after initial validation:
> Index IRQ Rtd Ref IRQs
> 0 255 N 0 6
> pci_link6: Links after disable:
> Index IRQ Rtd Ref IRQs
> 0 255 N 0 6
> pci_link7: Links after initial probe:
> Index IRQ Rtd Ref IRQs
> 0 11 N 0 5 10
> pci_link7: Links after initial validation:
> Index IRQ Rtd Ref IRQs
> 0 255 N 0 5 10
> pci_link7: Links after disable:
> Index IRQ Rtd Ref IRQs
> 0 255 N 0 5 10
Well, these two appear to be your problem due to your BIOS having buggy ASL.
You can work around it, but you'll need to figure out the names of your link
devices first. 'devinfo -v' with ACPI enabled can help with that. For
example, on my laptop:
% devinfo -v | grep 'pci_link[67]'
pci_link6 pnpinfo _HID=PNP0C0F _UID=106 at handle=\_SB_.C002.C0F2
pci_link7 pnpinfo _HID=PNP0C0F _UID=107 at handle=\_SB_.C002.C0F3
pci_link6 is called C0F2, and pci_link7 is called C0F3. You'll use these
names to override the IRQ for the link device by setting the following
variables in the loader:
hw.pci.link.C0F2.irq=11
hw.pci.link.C0F3.irq=11
(You'll have to replace C0F2 and C0F3 with the names for your link devices.
Probably LNKF and LNKG.)
You might also need this patch (but try the tunables above without the patch
first to be sure):
Index: dev/acpica/acpi_pci_link.c
===================================================================
RCS file: /usr/cvs/src/sys/dev/acpica/acpi_pci_link.c,v
retrieving revision 1.53
diff -u -r1.53 acpi_pci_link.c
--- dev/acpica/acpi_pci_link.c 6 Jan 2006 16:14:32 -0000 1.53
+++ dev/acpica/acpi_pci_link.c 2 Aug 2006 14:27:09 -0000
@@ -941,18 +941,16 @@
KASSERT(!PCI_INTERRUPT_VALID(link->l_irq),
("%s: link already has an IRQ", __func__));
- /* Check for a tunable override and use it if it is valid. */
+ /* Check for a tunable override. */
if (ACPI_SUCCESS(acpi_short_name(acpi_get_handle(dev), link_name,
sizeof(link_name)))) {
snprintf(tunable_buffer, sizeof(tunable_buffer),
"hw.pci.link.%s.%d.irq", link_name, link->l_res_index);
- if (getenv_int(tunable_buffer, &i) &&
- PCI_INTERRUPT_VALID(i) && link_valid_irq(link, i))
+ if (getenv_int(tunable_buffer, &i) && PCI_INTERRUPT_VALID(i))
return (i);
snprintf(tunable_buffer, sizeof(tunable_buffer),
"hw.pci.link.%s.irq", link_name);
- if (getenv_int(tunable_buffer, &i) &&
- PCI_INTERRUPT_VALID(i) && link_valid_irq(link, i))
+ if (getenv_int(tunable_buffer, &i) && PCI_INTERRUPT_VALID(i))
return (i);
}
--
John Baldwin
More information about the freebsd-mobile
mailing list