OpenSolaris

Printable Version Enter a New Search
Bug ID 6818652
Synopsis cpu_acpi_cache_cst panics with bad _CST objects on Tecra M9, M10 and R600
State 10-Fix Delivered (Fix available in build)
Category:Subcategory kernel:sched
Keywords
Responsible Engineer Bill Holler
Reported Against snv_110
Duplicate Of
Introduced In solaris_nevada
Commit to Fix snv_112
Fixed In snv_111a
Release Fixed solaris_nevada(snv_111a) , solaris_10u8(s10u8_02) (Bug ID:2175192)
Related Bugs 6700904 , 6822470
Submit Date 18-March-2009
Last Update Date 21-April-2009
Description
I've just LUed from 105 to 110 on my Tosh M9.

I get a panic (every time) on reboot.

The only packages which failed on the LU were SUNWxwfnt (which I
manually installed, and SUNWdcopy (which I've tried unchanged, removed,
and re-installed.)

I enabled kmdb, and attached is the pretty picture I get. Any clues?

(I've also searched bugtraq, and sunsolve for references to
cpu_acpi_cache and 6612299, 6756843 and 6781321 are all that I found,
but they don't seem related)

...
Mike Ramchand

stack:
cmntrap
cpu_acpi_cache_cst
cpu_acpi_cache_cstate_data
cpu_idle_init
post_startup
genunix:main
The kernel is panicking on this line:

/*
        * Does the package look coherent?
        */
       cnt = obj->Package.Elements[0].Integer.Value;


The system's ACPI _CST object claimed to have more than 2 elements.
However dereferencing Elements[0] traps.

The BIOS has a buggy _CST table.
Solaris can use on_trap() to protect itself when reading the ACPI _CST table.
This proposed fix survives mdb fault injection during cpu_acpi_cache_cst:

Webrev: http://cr.opensolaris.org/~bholler/6818652/

bash-3.2$ hg pdiffs
Not trusting file /ws/onnv-clone/.hg/hgrc from untrusted user nobody, group nobody
diff -r a47dcdb19715 -r 357cce765108 usr/src/uts/i86pc/os/cpupm/cpu_acpi.c
--- a/usr/src/uts/i86pc/os/cpupm/cpu_acpi.c     Thu Mar 19 14:29:36 2009 -0400
+++ b/usr/src/uts/i86pc/os/cpupm/cpu_acpi.c     Thu Mar 19 15:02:15 2009 -0700
@@ -695,8 +695,8 @@
        abuf.Length = ACPI_ALLOCATE_BUFFER;
        abuf.Pointer = NULL;
 
-       if (ACPI_FAILURE(AcpiEvaluateObject(handle->cs_handle, "_CST",
-           NULL, &abuf))) {
+       if (ACPI_FAILURE(AcpiEvaluateObjectTyped(handle->cs_handle, "_CST",
+           NULL, &abuf, ACPI_TYPE_PACKAGE))) {
                cmn_err(CE_NOTE, "!cpu_acpi: _CST evaluate failure");
                return (-1);
        }
Work Around
Most systems will have a BIOS option to disable Deep C-states C2 and C3.
Neither a M9 nor a M10 are available to me to look for this BIOS option.
The BIOS option is usually in a menu such as `advanced ACPI setup` or
`advanced CPU setup`.
There is no BIOS option to disable deep C-states on M9 and M10 systems.

These systems can boot xpv since xpv does not expose these objects to the OS.
There is no workaround for Install with a snv_110 or snv_111 based build.
Comments
Just completed 'pkg update' on Toshiba M10 from developer repository
of OpenSolaris 2008.11 and slammed into this issue.