Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 2 Aug 2006 10:28:09 -0400
From:      John Baldwin <jhb@freebsd.org>
To:        yraffah@savola.com
Cc:        freebsd-mobile@freebsd.org
Subject:   Re: Interrupt Storms on irq:11 with Tecra A4
Message-ID:  <200608021028.09765.jhb@freebsd.org>
In-Reply-To: <44D03E9F.1040409@savola.com>
References:  <1152019643.704.42.camel@redevil.savola.com> <1152358151.679.27.camel@redevil.savola.com> <44D03E9F.1040409@savola.com>

next in thread | previous in thread | raw e-mail | index | archive | help
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 rea=
lly=20
>  appreciate any help you can offer :) =20
> =20
>  pci_link6: Links after initial probe:
>  Index=A0 IRQ=A0 Rtd=A0 Ref=A0 IRQs
>  =A0=A0=A0 0=A0=A0 11=A0=A0 N=A0=A0=A0=A0 0=A0 6
>  pci_link6: Links after initial validation:
>  Index=A0 IRQ=A0 Rtd=A0 Ref=A0 IRQs
>  =A0=A0=A0 0=A0 255=A0=A0 N=A0=A0=A0=A0 0=A0 6
>  pci_link6: Links after disable:
>  Index=A0 IRQ=A0 Rtd=A0 Ref=A0 IRQs
>  =A0=A0=A0 0=A0 255=A0=A0 N=A0=A0=A0=A0 0=A0 6
>  pci_link7: Links after initial probe:
>  Index=A0 IRQ=A0 Rtd=A0 Ref=A0 IRQs
>  =A0=A0=A0 0=A0=A0 11=A0=A0 N=A0=A0=A0=A0 0=A0 5 10
>  pci_link7: Links after initial validation:
>  Index=A0 IRQ=A0 Rtd=A0 Ref=A0 IRQs
>  =A0=A0=A0 0=A0 255=A0=A0 N=A0=A0=A0=A0 0=A0 5 10
>  pci_link7: Links after disable:
>  Index=A0 IRQ=A0 Rtd=A0 Ref=A0 IRQs
>  =A0=A0=A0 0=A0 255=A0=A0 N=A0=A0=A0=A0 0=A0 5 10

Well, these two appear to be your problem due to your BIOS having buggy ASL=
=2E =20
You can work around it, but you'll need to figure out the names of your lin=
k=20
devices first.  'devinfo -v' with ACPI enabled can help with that.  For=20
example, on my laptop:

% devinfo -v | grep 'pci_link[67]'
    pci_link6 pnpinfo _HID=3DPNP0C0F _UID=3D106 at handle=3D\_SB_.C002.C0F2
    pci_link7 pnpinfo _HID=3DPNP0C0F _UID=3D107 at handle=3D\_SB_.C002.C0F3

pci_link6 is called C0F2, and pci_link7 is called C0F3.  You'll use these=20
names to override the IRQ for the link device by setting the following=20
variables in the loader:

hw.pci.link.C0F2.irq=3D11
hw.pci.link.C0F3.irq=3D11

(You'll have to replace C0F2 and C0F3 with the names for your link devices.=
 =20
Probably LNKF and LNKG.)

You might also need this patch (but try the tunables above without the patc=
h=20
first to be sure):

Index: dev/acpica/acpi_pci_link.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
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
=2D-- 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__));
=20
=2D	/* 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);
=2D		if (getenv_int(tunable_buffer, &i) &&
=2D		    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);
=2D		if (getenv_int(tunable_buffer, &i) &&
=2D		    PCI_INTERRUPT_VALID(i) && link_valid_irq(link, i))
+		if (getenv_int(tunable_buffer, &i) && PCI_INTERRUPT_VALID(i))
 			return (i);
 	}
=20

=2D-=20
John Baldwin



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200608021028.09765.jhb>