From owner-freebsd-current@FreeBSD.ORG Tue Apr 5 18:50:58 2005 Return-Path: Delivered-To: freebsd-current@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 2079E16A4CE for ; Tue, 5 Apr 2005 18:50:58 +0000 (GMT) Received: from mail22.sea5.speakeasy.net (mail22.sea5.speakeasy.net [69.17.117.24]) by mx1.FreeBSD.org (Postfix) with ESMTP id C498543D5A for ; Tue, 5 Apr 2005 18:50:57 +0000 (GMT) (envelope-from jhb@FreeBSD.org) Received: (qmail 10154 invoked from network); 5 Apr 2005 18:50:57 -0000 Received: from server.baldwin.cx ([216.27.160.63]) (envelope-sender )AES256-SHA encrypted SMTP for ; 5 Apr 2005 18:50:57 -0000 Received: from [10.50.41.231] (gw1.twc.weather.com [216.133.140.1]) (authenticated bits=0) by server.baldwin.cx (8.13.1/8.13.1) with ESMTP id j35Iopcf067283; Tue, 5 Apr 2005 14:50:51 -0400 (EDT) (envelope-from jhb@FreeBSD.org) From: John Baldwin To: freebsd-current@FreeBSD.org Date: Tue, 5 Apr 2005 14:49:30 -0400 User-Agent: KMail/1.6.2 References: <200504051349.13620.jhb@FreeBSD.org> <20050405204106.15e9d993.antoine.brodin@laposte.net> In-Reply-To: <20050405204106.15e9d993.antoine.brodin@laposte.net> MIME-Version: 1.0 Content-Disposition: inline Content-Type: text/plain; charset="windows-1252" Content-Transfer-Encoding: 7bit Message-Id: <200504051449.30871.jhb@FreeBSD.org> X-Spam-Status: No, score=-102.8 required=4.2 tests=ALL_TRUSTED, USER_IN_WHITELIST autolearn=failed version=3.0.2 X-Spam-Checker-Version: SpamAssassin 3.0.2 (2004-11-16) on server.baldwin.cx cc: nate@root.org cc: k-gleb@yandex.ru cc: dan.cojocar@gmail.com cc: Antoine Brodin Subject: Re: Interrupt storm X-BeenThere: freebsd-current@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: Discussions about the use of FreeBSD-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 05 Apr 2005 18:50:58 -0000 On Tuesday 05 April 2005 02:41 pm, Antoine Brodin wrote: > John Baldwin wrote: > > Ok, I see the issue now. The problem is that the BIOS sets the IRQ > > registers in the PCI devices to values that don't match how the links are > > programmed and we tend to trust the BIOS over the links in those cases. > > Can you tell me what IRQ sk0 gets if you don't use ACPI? Does it get 5 > > or 9? If it gets 9, does it work ok? > > > > You can try this patch for ACPI. Unfortunately, some BIOSes lie when you > > ask a link which IRQ it is routed to, so I'm not sure if this patch can > > be committed as is. Nate, do you know if such BIOSen only return no IRQ > > at all (0 or 255) when they lie rather than a bogus "valid" IRQ? > > Without ACPI, sk0 gets irq 5 and it works ok. > > With your patch and ACPI, sk0 no longer timeouts, and it's usable. > But I still have interrupt storms. > dmesg: http://bsd.miki.eu.org/~antoine/current+acpi+patch.dmesg Well, all the interrupts are now routed the same as with the old ACPI code. Perhaps, can you try commenting out the code that calls _DIS in acpi_pci_link_attach()? Specifically, here: /* * Try to disable this link. If successful, set the current IRQ to * zero and flags to indicate this link is not routed. If we can't * run _DIS (i.e., the method doesn't exist), assume the initial * IRQ was routed by the BIOS. */ if (ACPI_SUCCESS(AcpiEvaluateObject(acpi_get_handle(dev), "_DIS", NULL, NULL))) for (i = 0; i < sc->pl_num_links; i++) sc->pl_links[i].l_irq = PCI_INVALID_IRQ; else for (i = 0; i < sc->pl_num_links; i++) if (PCI_INTERRUPT_VALID(sc->pl_links[i].l_irq)) sc->pl_links[i].l_routed = TRUE; Add #if 0 / #endif so you have this: #if 0 /* * Try to disable this link. If successful, set the current IRQ to * zero and flags to indicate this link is not routed. If we can't * run _DIS (i.e., the method doesn't exist), assume the initial * IRQ was routed by the BIOS. */ if (ACPI_SUCCESS(AcpiEvaluateObject(acpi_get_handle(dev), "_DIS", NULL, NULL))) for (i = 0; i < sc->pl_num_links; i++) sc->pl_links[i].l_irq = PCI_INVALID_IRQ; else #endif for (i = 0; i < sc->pl_num_links; i++) if (PCI_INTERRUPT_VALID(sc->pl_links[i].l_irq)) sc->pl_links[i].l_routed = TRUE; And let me know if that makes a difference. -- John Baldwin <>< http://www.FreeBSD.org/~jhb/ "Power Users Use the Power to Serve" = http://www.FreeBSD.org