http://defect.opensolaris.org/bz/show_bug.cgi?id=4001


Bill Holler <bill.holler at sun.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |CAUSEKNOWN




--- Comment #1 from Bill Holler <bill.holler at sun.com>  2008-10-16 13:44:36 
---
A breakpoint in cpu_acpi_cache_cst() shows it is failing to evaluate the _CST
object on this machine.

Here are the hande data structures in cpu_idle_fini() just before the
kstat_delete():

[0]> 0xffffff050ff04400 ::print cpu_acpi_state_t
{
    cs_handle = 0xffffff050fbce8c8
    cs_dip = 0xffffff050f164ec0
    cpu_acpi_cached = 0xb
    cs_pstates = {
        ss_states = 0xffffff0510da6b00
        ss_count = 0x2
    }
    cs_pct = [
        {
            cr_addrspace_id = 0x7f
            cr_width = 0
            cr_offset = 0
            cr_asize = 0
            cr_address = 0
        }
        {
            cr_addrspace_id = 0x7f
            cr_width = 0
            cr_offset = 0
            cr_asize = 0
            cr_address = 0
        }
    ]                                 
    cs_psd = {
        sd_entries = 0
        sd_revision = 0
        sd_domain = 0
        sd_type = 0
        sd_num = 0
    }
    cs_ppc = 0
    cs_tstates = {
        ss_states = 0
        ss_count = 0
    }
    cs_ptc = [
        {
            cr_addrspace_id = 0x7f
            cr_width = 0
            cr_offset = 0
            cr_asize = 0
            cr_address = 0
        }
        {
            cr_addrspace_id = 0x7f
            cr_width = 0              
            cr_offset = 0
            cr_asize = 0
            cr_address = 0
        }
    ]
    cs_tsd = {
        sd_entries = 0
        sd_revision = 0
        sd_domain = 0
        sd_type = 0
        sd_num = 0
    }
    cs_tpc = 0
    cs_cstates = {
        ss_states = 0
        ss_count = 0
    }
    bm_info = 0
}


handle->cs_states.ss_states is NULL.

This line of cpu_idle_fini() sets cstate to NULL:
        cstate = (cpu_acpi_cstate_t *)CPU_ACPI_CSTATES(handle);


A look at cpu_acpi_get_max_cstates() shows cpu_max_cstates is set to 1
when CPU_ACPI_CSTATES(handle) is NULL:
uint_t
cpu_acpi_get_max_cstates(cpu_acpi_handle_t handle)
{
        if (CPU_ACPI_CSTATES(handle))
                return (CPU_ACPI_CSTATES_COUNT(handle));
        else
                return (1);
}
cpu_acpi_get_max_cstates assumes a kstat was created for C1.


cpu_idle_fini() is using NULL cstate in this loop:
        for (i = CPU_ACPI_C1; i <= cpu_max_cstates; i++) {
                if (cstate->cs_ksp != NULL)
                        kstat_delete(cstate->cs_ksp);
        }


A possible fix is to check for NULL cstate pointer.

-- 
Configure bugmail: http://defect.opensolaris.org/bz/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.

Reply via email to