Updated acpi_cpu patch

Robert Watson rwatson at freebsd.org
Tue Nov 18 13:26:33 PST 2003

On Tue, 18 Nov 2003, Nate Lawson wrote:

> Below you'll find the update patch for acpi_cpu.  Please test this,
> especially for SMP and laptops with _CST objects in their ASL. 
> Notes:
> * Add a detach method that disables entry to acpi_cpu_idle and in the SMP
> case, IPIs all processors to exit sleeping.  This fixes a panic on
> shutdown for MP boxes.

Sigh, I appear to have been mistaken about the SMP reboot problem being
fixed, sorry about that.  Mark's random_harvest panic appears to have
caused me to miss the other failure mode in my last test.  Stack trace
attached, and I believe I'm running with your latest patch.

Robert N M Watson             FreeBSD Core Team, TrustedBSD Projects
robert at fledge.watson.org      Network Associates Laboratories

crash2# reboot
boot() called on cpu#0
Waiting (max 60 seconds) for system process `vnlru' to stop...stopped
Waiting (max 60 seconds) for system process `bufdaemon' to stop...stopped
Waiting (max 60 seconds) for system process `syncer' to stop...stopped

syncing disks, buffers remaining... 
Uptime: 1m4s
Shutting down ACPI
terneRle btoroatpi n1g2. .w.i
 h interrupts disabled
panic: Assertion td->td_turnstile != NULL failed at
cpuid = 1; 
Stopped at      Debugger+0x55:  xchgl   %ebx,in_Debugger.0
db> trace
Debugger(c08975c7,1,c0896aca,c8f389f4,100) at Debugger+0x55
panic(c0896aca,c089a415,c089a1f2,1b5,c0959398) at panic+0x156
turnstile_wait(c20e1280,c0955320,c2007640,1cc,c101bfe4) at
_mtx_lock_sleep(c0955320,0,c08ad7ae,df,0) at _mtx_lock_sleep+0x125
_mtx_lock_flags(c0955320,0,c08ad7ae,df,a) at _mtx_lock_flags+0x98
vm_fault(c0951d00,0,1,0,c1380640) at vm_fault+0x5a
trap_pfault(c8f38c04,0,9c,fc,9c) at trap_pfault+0x109
trap(c1380018,c8f30010,c0660010,0,10) at trap+0x333
calltrap() at calltrap+0x5
--- trap 0xc, eip = 0xc047c619, esp = 0xc8f38c44, ebp = 0xc8f38c64 ---
AcpiHwLowLevelRead(10,c8f38c80,94,10,0) at AcpiHwLowLevelRead+0x19
AcpiHwRegisterRead(0,1,c8f38ca0,0,c137fc5c) at AcpiHwRegisterRead+0x71
AcpiGetRegister(1,c8f38ccc,0,3e8,0) at AcpiGetRegister+0x61
acpi_cpu_idle(c8f38d0c,c0658f4c,c0955320,2,c089533f) at acpi_cpu_idle+0x5e
cpu_idle(c0955320,2,c089533f,53,14b) at cpu_idle+0x28
idle_proc(0,c8f38d48,c08951f4,311,e8241c89) at idle_proc+0x3c
fork_exit(c0658f10,0,c8f38d48) at fork_exit+0xb4
fork_trampoline() at fork_trampoline+0x8
--- trap 0x1, eip = 0, esp = 0xc8f38d7c, ebp = 0 ---

(kgdb) bt
#0  0xc081317b in Debugger (msg=0x12 <Address 0x12 out of bounds>)
    at machine/atomic.h:263
#1  0xc066db36 in panic (fmt=0xc0896aca "Assertion %s failed at %s:%d")
    at ../../../kern/kern_shutdown.c:534
#2  0xc0693c8c in turnstile_wait (ts=0xc20e1280, lock=0xc0955320, 
    owner=0xc2007640) at ../../../kern/subr_turnstile.c:469
#3  0xc0664125 in _mtx_lock_sleep (m=0xc0955320, opts=0, 
    file=0xc08ad7ae "../../../vm/vm_fault.c", line=223)
    at ../../../kern/kern_mutex.c:476
#4  0xc0663c88 in _mtx_lock_flags (m=0xc0955320, opts=0, 
    file=0xc08ad7ae "../../../vm/vm_fault.c", line=223)
    at ../../../kern/kern_mutex.c:218
#5  0xc07d39fa in vm_fault (map=0xc0951d00, vaddr=0, fault_type=1 '\001', 
    fault_flags=0) at ../../../vm/vm_fault.c:223
#6  0xc0829159 in trap_pfault (frame=0xc8f38c04, usermode=0, eva=156)
    at ../../../i386/i386/trap.c:711
#7  0xc0828dd3 in trap (frame=
      {tf_fs = -1053294568, tf_es = -923598832, tf_ds = -1067057136,
tf_edi = 0, tf_esi = 16, tf_ebp = -923562908, tf_isp = -923562960, tf_ebx
= -923562880, tf_edx = -1, tf_ecx = 148, tf_eax = -923562880, tf_trapno =
12, tf_err = 0, tf_eip = -1069038055, tf_cs = 8, tf_eflags = 65538, tf_esp
= 1024, tf_ss = -923562880}) at ../../../i386/i386/trap.c:420
#8  0xc08148b8 in calltrap () at {standard input}:94
#9  0xc047c321 in AcpiHwRegisterRead (UseLock=0 '\0', RegisterId=16, 
    ReturnValue=0x12) at ../../../contrib/dev/acpica/hwregs.c:601
#10 0xc047c071 in AcpiGetRegister (RegisterId=18, ReturnValue=0x12,
    at ../../../contrib/dev/acpica/hwregs.c:375
#11 0xc0499ebe in acpi_cpu_idle () at ../../../dev/acpica/acpi_cpu.c:798
#12 0xc081d2d8 in cpu_idle () at ../../../i386/i386/machdep.c:1071
#13 0xc0658f4c in idle_proc (dummy=0x0) at ../../../kern/kern_idle.c:86
#14 0xc0658c44 in fork_exit (callout=0xc0658f10 <idle_proc>, arg=0x12, 
    frame=0x12) at ../../../kern/kern_fork.c:793
(kgdb) l *AcpiHwLowLevelRead+0x19
0xc047c619 is in AcpiHwLowLevelRead (../../../contrib/dev/acpica/hwregs.c:836).
831         /*
832          * Must have a valid pointer to a GAS structure, and
833          * a non-zero address within. However, don't return an error
834          * because the PM1A/B code must not fail if B isn't present.
835          */
836         if ((!Reg) ||
837             (!ACPI_VALID_ADDRESS (Reg->Address)))
838         {
839             return (AE_OK);
840         }

More information about the freebsd-current mailing list