Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 21 Mar 2008 11:02:35 -0400
From:      John Baldwin <jhb@freebsd.org>
To:        freebsd-hardware@freebsd.org, David Wolfskill <david@catwhisker.org>
Subject:   Re: Dell Optiplex 755 hangs every other boot before 82801 Family Hub Interface to PCI Bridge probed
Message-ID:  <200803211102.35682.jhb@freebsd.org>
In-Reply-To: <20080319204148.GZ53010@bunrab.catwhisker.org>
References:  <20080318171434.GA49159@bunrab.catwhisker.org> <200803190917.17502.jhb@freebsd.org> <20080319204148.GZ53010@bunrab.catwhisker.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Wednesday 19 March 2008 04:41:48 pm David Wolfskill wrote:
> On Wed, Mar 19, 2008 at 09:17:17AM -0400, John Baldwin wrote:
> > ...
> > Do a verbose boot.  It might be enumerating the PCI bus when it hangs or 
some 
> > such and a verbose boot would tell us more of where it is at when it 
hangs.  
> > Other than that, you'll have to add printfs to track down exactly where it 
> > hangs. :-/
> 
> OK; I switched it to boot (verbosely) from slice 4 (HEAD/CURRENT
> as of a couple weeks ago) -- figuring that there might be more
> "interesting" information available that way, then ran tip(1) within
> script(1) to capture the output.
> 
> I edited the typescript file in a couple of ways:
> 
> * I removed the ^M characters (saving about 2K in file size)
> * I split the file into "console_755-hang" and "console_755-nohang" to
>   make comparing the results of the experiments a bit easier.  In the
>   same spirit, I removed the beginning and ending script- and
>   tip-generated stuff that wasn't relevant.
> 
> I've attached both files.
> 
> The last bit of stuff in the "hang" case was:
> 
> usb6: USB revision 2.0
> uhub6: <Intel EHCI root hub, class 9/0, rev 2.00/1.00, addr 1> on usb6
> uhub6: 6 ports with 6 removable, self powered
> pcib2: <ACPI PCI-PCI bridge> at device 30.0 on pci0
> pcib2:   domain            0
> pcib2:   secondary bus     2
> pcib2:   subordinate bus   2
> pcib2:   I/O decode        0xf000-0xfff
> pcib2:   no prefetched decode
> pcib2:   Subtractively decoded bridge.
> 
> 
> and in the "nohang" case, that bit was followed by:
> 
> pci2: <ACPI PCI bus> on pcib2
> pci2: domain=0, physical bus=2

Ok.  Please apply the patch below and report back which printfs you see.

> I note, too, that running diff(1) to compare the 2 files shows that the
> "nohang" case is missing some curious lines that show up in the "hang"
> case, e.g.:
> 
>  ioapic0: routing intpin 22 (PCI IRQ 22) to vector 53
>  ehci0: [GIANT-LOCKED]
>  ehci0: [ITHREAD]
> -usb2: waiting for BIOS to give up control
>  usb2: EHCI version 1.0
>  usb2: wrong number of companions (3 != 2)
>  usb2: companion controllers, 2 ports each: usb0 usb1
> ...
>  ehci1: Reserved 0x400 bytes for rid 0x10 type 3 at 0xff980800
>  ehci1: [GIANT-LOCKED]
>  ehci1: [ITHREAD]
> -usb6: waiting for BIOS to give up control
> -usb6: timed out waiting for BIOS
>  usb6: EHCI version 1.0
>  usb6: companion controllers, 2 ports each: usb3 usb4 usb5
>  usb6: <EHCI (generic) USB 2.0 controller> on ehci1

This is due to the ehci(4) boot time hangs fixed in the last commit to 
ehci_pci.c.  You can ignore it.

Index: acpi_pcib.c
===================================================================
RCS file: /usr/cvs/src/sys/dev/acpica/acpi_pcib.c,v
retrieving revision 1.60
diff -u -r1.60 acpi_pcib.c
--- acpi_pcib.c	3 Dec 2005 21:17:17 -0000	1.60
+++ acpi_pcib.c	21 Mar 2008 15:00:34 -0000
@@ -147,6 +147,7 @@
      * are several valid bridges in the field that do not have a _PRT, so
      * only warn about missing tables if bootverbose is set.
      */
+    device_printf(dev, "fetching _PRT\n");
     prt->Length = ACPI_ALLOCATE_BUFFER;
     status = AcpiGetIrqRoutingTable(acpi_get_handle(dev), prt);
     if (ACPI_FAILURE(status) && (bootverbose || status != AE_NOT_FOUND))
@@ -157,6 +158,7 @@
     /*
      * Attach the PCI bus proper.
      */
+    device_printf(dev, "adding pci bus child device\n");
     if ((child = device_add_child(dev, "pci", busno)) == NULL) {
 	device_printf(device_get_parent(dev), "couldn't attach pci bus\n");
 	return_VALUE(ENXIO);
@@ -165,8 +167,10 @@
     /*
      * Now go scan the bus.
      */
+    device_printf(dev, "force attaching PCI link devices found in _PRT\n");
     prt_walk_table(prt, prt_attach_devices, dev);
 
+    device_printf(dev, "attaching the PCI child bus device\n");
     return_VALUE (bus_generic_attach(dev));
 }
 

-- 
John Baldwin



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