i386/89545: Compaq DL 360 ACPI boot problem

John Baldwin jhb at freebsd.org
Tue Jan 3 06:23:59 PST 2006


On Saturday 31 December 2005 07:30 am, Anders Nordby wrote:
> The following reply was made to PR i386/89545; it has been noted by GNATS.
>
> From: Anders Nordby <anders at FreeBSD.org>
> To: John Baldwin <jhb at freebsd.org>
> Cc: bug-followup at freebsd.org, uralmetal at gmail.com
> Subject: Re: i386/89545: Compaq DL 360 ACPI boot problem
> Date: Sat, 31 Dec 2005 13:27:28 +0100
>
>  Hi,
>
>  On Thu, Dec 29, 2005 at 10:34:15PM +0100, Anders Nordby wrote:
>  > (..)
>
>  For the record. I just tried using 6.0-STABLE as of december 30. It
>  still hangs:
>
>  acpi0: <COMPAQ MICRO> on motherboard
>  acpi0: Power Button (fixed)
>  unknown: I/O range not supported
>
>  But now it stops earlier, or at least it doesn't print the pci_link<n>:
>  lines.
>
>  Applying the printf patch then, I get:
>
>  acpi0: <COMPAQ MICRO> on motherboard
>  acpi0: Power Button (fixed)
>  unknown: I/O range not supported
>  attach started
>  pci_link0: calling _CRS
>  pci_link0: _CRS returned AE_OK
>  pci_link0: num_links = 0
>  attach started
>
>  Phew, luckily acpi is a module, so I only need to recompile it instead
>  of the whole kernel. I had ACPI problems with FreeBSD 6 on other Compaq
>  servers as well, one DL 580. Once we get this solved for DL 360 I can try
>  with the 580 (it is in production, so I can not easily take it down when
>  I want -- but it would be nice to use both CPUs on it ;-)).

Ok, looks like it is ACPI_SERIAL_BEGIN() it is hanging on.  Also, the reason 
you don't see the pritnf's in 6-stable is the devices are now marked quiet so 
they don't show up in dmesg by default anymore.  The problem is I must have 
forgotten to release the pci_link lock somewhere.  If you had INVARIANTS on 
it should have panic'd in sx_xlock.  As it is, I think this patch will fix 
the hangs on both 6.x and 7.0:

Index: acpi_pci_link.c
===================================================================
RCS file: /usr/cvs/src/sys/dev/acpica/acpi_pci_link.c,v
retrieving revision 1.51
diff -u -r1.51 acpi_pci_link.c
--- acpi_pci_link.c     5 Dec 2005 19:50:00 -0000       1.51
+++ acpi_pci_link.c     3 Jan 2006 14:24:23 -0000
@@ -449,8 +449,10 @@
                }
        }
        sc->pl_num_links = creq.count;
-       if (creq.count == 0)
+       if (creq.count == 0) {
+               ACPI_SERIAL_END(pci_link);
                return (0);
+       }
        sc->pl_links = malloc(sizeof(struct link) * sc->pl_num_links,
            M_PCI_LINK, M_WAITOK | M_ZERO);


-- 
John Baldwin <jhb at FreeBSD.org>  <><  http://www.FreeBSD.org/~jhb/
"Power Users Use the Power to Serve"  =  http://www.FreeBSD.org


More information about the freebsd-acpi mailing list