Date: Tue, 18 Nov 2003 16:50:01 -0500 (EST) From: Robert Watson <rwatson@freebsd.org> To: Nate Lawson <nate@root.org> Cc: current@freebsd.org Subject: Re: Updated acpi_cpu patch Message-ID: <Pine.NEB.3.96L.1031118163325.92350f-100000@fledge.watson.org> In-Reply-To: <20031118132905.P64933@root.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On Tue, 18 Nov 2003, Nate Lawson wrote:
> On Tue, 18 Nov 2003, Robert Watson wrote:
> > 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.
>
> Could you add a printf to the start of acpi_cpu_detach()? I want to see
> if we're being called before or after ACPI is stopped ("Shutting down
I modified acpi_cpu_detach:
+acpi_cpu_detach(device_t dev)
+{
+
+ printf("\nacpi_cpu_detach\n\n");
+
But sure enough:
syncing disks, buffers remaining...
done
Uptime: 56s
Shutting down ACPI
kernel trap 12 with interrupts disabled
tanicR:e bAososteirntgi.o.n.
d->td_turnstile != NULL failed at ../../../kern/subr_turnstile.c:437
cpuid = 0;
Debugger("panic")
Stopped at Debugger+0x55: xchgl %ebx,in_Debugger.0
db>
So indeed, it doesn't look like the ACPI detach call has gone out yet.
> ACPI"). Also, please do:
> l *AcpiGetRegister+0x61
> I think it's the call to get the bus master status, which is interesting
> since this means that cpu_cx_count != 0 which means that acpi_cpu_detach
> hasn't run yet.
This is using the existing crash from the trace I sent you previously.
(kgdb) l *AcpiGetRegister+0x61
0xc047c071 is in AcpiGetRegister
(../../../contrib/dev/acpica/hwregs.c:375).
370 {
371 return_ACPI_STATUS (Status);
372 }
373 }
374
375 Status = AcpiHwRegisterRead (ACPI_MTX_DO_NOT_LOCK,
376 BitRegInfo->ParentRegister, &RegisterValue);
377
378 if (Flags & ACPI_MTX_LOCK)
379 {
Also potentially useful information:
(kgdb) inspect cpu_cx_count
$1 = 1
Robert N M Watson FreeBSD Core Team, TrustedBSD Projects
robert@fledge.watson.org Network Associates Laboratories
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.NEB.3.96L.1031118163325.92350f-100000>
