PII SMP system hangs during boot with ACPI enabled

Nate Lawson nate at root.org
Mon Nov 24 14:02:03 PST 2003

On Mon, 24 Nov 2003, John Polstra wrote:
> On 24-Nov-2003 Nate Lawson wrote:
> >
> > Please also send the output of acpidump -t -d > jdp-P2.asl
> When I try to run that command, I get:
>   acpidump: sysctl machdep.acpi_root does not point to RSDP
> The sysctl command shows that machdep.acpi_root is 0.
> Remember, though, in order to boot it I had to disable ACPI in
> /boot/loader.conf.

Yes, I see.  You could use an older kernel like the 5.1R cd.

> > If you can break to the debugger after it has hung, a tr would be nice.
> The fact that it didn't occur to me to try that says a lot about how
> long I've been away from -current. :-(  I've attached traces from
> two different boots.  They seem to vary somewhat.  I can supply line
> numbers on request.

Trace 1:
wakeup(c2944100,0,c06a7546,140,6c) at wakeup+0x4
AcpiOsSignalSemaphore(c2944100,1) at AcpiOsSignalSemaphore+0xa8
AcpiUtReleaseMutex(9,30,c295e8c0,c295e760,cdb64acc) at AcpiUtReleaseMutex+0x8c
AcpiUtReleaseToCache(3,c295e760,cdb64ad8,c045ac17,c295e760) at AcpiUtReleaseToCache+0x8c

Trace 2:
_mtx_unlock_flags(c2944100,0,c06a7546,150,6c) at _mtx_unlock_flags+0x96
AcpiOsSignalSemaphore(c2944100,1) at AcpiOsSignalSemaphore+0xc8
AcpiUtReleaseMutex(9,8,c045f9cc,c2965940,c12a0c00) at AcpiUtReleaseMutex+0x8c
AcpiUtAcquireFromCache(2,cdb64bf4,c0462229,c12a0c00,cdb64c34) at AcpiUtAcquireFromCache+0x53

Both of these show that acpi_task_thread is calling a task and then
AcpiOsSignalSemaphore is hanging.  I'm wondering if your system can't
handle the acpi interrupt being moved to irq 20.  Please try this
(untested) patch that should disable moving the SCI to irq 20.  jhb can
probably address this better than I.


Index: /sys/i386/acpica/madt.c
RCS file: /home/ncvs/src/sys/i386/acpica/madt.c,v
retrieving revision 1.7
diff -u -r1.7 madt.c
--- /sys/i386/acpica/madt.c	14 Nov 2003 22:26:29 -0000	1.7
+++ /sys/i386/acpica/madt.c	24 Nov 2003 21:51:02 -0000
@@ -538,11 +538,13 @@

 	if (intr->Source != intr->GlobalSystemInterrupt) {
+#if 0
 		/* XXX: This assumes that the SCI uses IRQ 9. */
 		if (intr->GlobalSystemInterrupt > 15 && intr->Source == 9)
 			ioapic_remap_vector(new_ioapic, new_pin, intr->Source);
 		if (madt_find_interrupt(intr->Source, &old_ioapic,
 		    &old_pin) != 0)

More information about the freebsd-current mailing list