ACPI hang on 6.0-RELEASE on Compaq Proliant ML530 (866MHz Xeon)
John Baldwin
jhb at freebsd.org
Thu Dec 22 08:17:03 PST 2005
On Wednesday 21 December 2005 06:34 pm, Pawel Worach wrote:
> John Baldwin wrote:
> > On Monday 28 November 2005 09:38 am, Kevin Day wrote:
> >> On Nov 28, 2005, at 7:10 AM, John Baldwin wrote:
> >>> On Saturday 26 November 2005 11:18 am, Kevin Day wrote:
> >>>> Hangs on boot after displaying kernel copyright notice with ACPI
> >>>> enabled. Works fine with ACPI disabled.
> >>>>
> >>>> Server has two CPUs, but hang occurs with or without SMP kernel.
> >>>>
> >>>>
> >>>>
> >>>> acpidump at http://www.dragondata.com/~toasty/toasty-ml530.asl
> >>>>
> >>>>
> >>>> dmesg from working config:
> >>>
> >>> Any chance you could use a serial console to capture the dmesg from
> >>> a booth
> >>> with ACPI enabled?
> >>
> >> I get as far as:
> >>> Copyright (c) 1992-2005 The FreeBSD Project.
> >>> Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993,
> >>> 1994
> >>> The Regents of the University of California. All rights
> >>> reserved.
> >>> FreeBSD 6.0-RELEASE #0: Thu Nov 3 09:36:13 UTC 2005
> >>> root at x64.samsco.home:/usr/obj/usr/src/sys/GENERIC
> >>
> >> before it hangs. I realize that's not much to go on. :)
> >>
> >>
> >> Since the next thing it should be displaying is the mptable string,
> >> just in case this is relevant, here's the output of mptable:
> >
> > Actually, in the ACPI case it won't use the mptable, but use the MADT
> > table from ACPI instead. It is odd that your MADT is missing a Local NMI
> > entry for CPU 0. Could you capture the dmesg from a boot -v over a
> > serial console with ACPI enabled?
>
> Hi,
>
> I have the same problem with ML530 hardware, both RELENG_6_0 and
> RELENG_6 fail in the same way. ASL and boot -v output can be found here:
> http://62.119.221.30/ml530-acpi/
>
> It just hangs there after the "pci_link1: <ACPI PCI Link INA0> on acpi0"
> message, break to debugger doesn't work.
>
> Regards
Unfortunately what I need is for someone with the hardware to add some more
printf's to find where it is hanging. Here's a patch. Please get a verbose
dmesg with this, thanks.
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 22 Dec 2005 16:15:51 -0000
@@ -421,6 +421,7 @@
ACPI_STATUS status;
int i;
+ device_printf("attach started\n");
sc = device_get_softc(dev);
sc->pl_dev = dev;
ACPI_SERIAL_BEGIN(pci_link);
@@ -432,14 +433,19 @@
*/
creq.in_dpf = DPF_OUTSIDE;
creq.count = 0;
+ device_printf("calling _CRS\n");
status = AcpiWalkResources(acpi_get_handle(dev), "_CRS",
acpi_count_irq_resources, &creq);
+ device_printf("_CRS returned %s\n", AcpiFormatException(status));
sc->pl_crs_bad = ACPI_FAILURE(status);
if (sc->pl_crs_bad) {
creq.in_dpf = DPF_OUTSIDE;
creq.count = 0;
+ device_printf("calling _PRS\n");
status = AcpiWalkResources(acpi_get_handle(dev), "_PRS",
acpi_count_irq_resources, &creq);
+ device_printf("_PRS returned %s\n",
+ AcpiFormatException(status));
if (ACPI_FAILURE(status)) {
device_printf(dev,
"Unable to parse _CRS or _PRS: %s\n",
@@ -449,6 +455,7 @@
}
}
sc->pl_num_links = creq.count;
+ device_printf("num_links = %d\n", sc->pl_num_links);
if (creq.count == 0)
return (0);
sc->pl_links = malloc(sizeof(struct link) * sc->pl_num_links,
@@ -462,6 +469,7 @@
sc->pl_links[i].l_isa_irq = FALSE;
sc->pl_links[i].l_res_index = -1;
}
+ device_printf("links initialized\n", sc->pl_num_links);
/* Try to read the current settings from _CRS if it is valid. */
if (!sc->pl_crs_bad) {
@@ -469,8 +477,11 @@
rreq.link_index = 0;
rreq.res_index = 0;
rreq.sc = sc;
+ device_printf("calling _CRS again\n");
status = AcpiWalkResources(acpi_get_handle(dev), "_CRS",
link_add_crs, &rreq);
+ device_printf("_CRS returned %s\n",
+ AcpiFormatException(status));
if (ACPI_FAILURE(status)) {
device_printf(dev, "Unable to parse _CRS: %s\n",
AcpiFormatException(status));
@@ -487,8 +498,10 @@
rreq.link_index = 0;
rreq.res_index = 0;
rreq.sc = sc;
+ device_printf("calling _PRS again\n");
status = AcpiWalkResources(acpi_get_handle(dev), "_PRS",
link_add_prs, &rreq);
+ device_printf("_PRS returned %s\n", AcpiFormatException(status));
if (ACPI_FAILURE(status) &&
(status != AE_NOT_FOUND || sc->pl_crs_bad)) {
device_printf(dev, "Unable to parse _PRS: %s\n",
--
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