diff options
author | Anup Pemmaiah <Napanda.Pemmaiah@Sun.COM> | 2009-03-10 11:28:47 -0400 |
---|---|---|
committer | Anup Pemmaiah <Napanda.Pemmaiah@Sun.COM> | 2009-03-10 11:28:47 -0400 |
commit | 37d22dc0ee639b47fcbc0f16ce223299317f60d5 (patch) | |
tree | 7ac181c9f8b7f44e2afc90e262faae006cccd2e8 /usr/src | |
parent | a10fbc55473da23eda5e8351d09bb95491a2763e (diff) | |
download | illumos-gate-37d22dc0ee639b47fcbc0f16ce223299317f60d5.tar.gz |
6756843 Clean up messages related to P and T states
6811793 hald crashes because supported_frequencies_Hz is null
Diffstat (limited to 'usr/src')
-rw-r--r-- | usr/src/uts/i86pc/os/cpupm/cpu_acpi.c | 125 | ||||
-rw-r--r-- | usr/src/uts/i86pc/os/cpupm/cpupm_mach.c | 12 | ||||
-rw-r--r-- | usr/src/uts/i86pc/os/mp_startup.c | 7 |
3 files changed, 111 insertions, 33 deletions
diff --git a/usr/src/uts/i86pc/os/cpupm/cpu_acpi.c b/usr/src/uts/i86pc/os/cpupm/cpu_acpi.c index 3e7c8de4a3..d7b4b3a5c1 100644 --- a/usr/src/uts/i86pc/os/cpupm/cpu_acpi.c +++ b/usr/src/uts/i86pc/os/cpupm/cpu_acpi.c @@ -25,6 +25,8 @@ #include <sys/cpu_acpi.h> #include <sys/cpu_idle.h> +#include <sys/dtrace.h> +#include <sys/sdt.h> /* * List of the processor ACPI object types that are being used. @@ -68,6 +70,29 @@ static cpu_acpi_obj_attr_t cpu_acpi_obj_attrs[] = { }; /* + * To avoid user confusion about ACPI T-State related error log messages, + * most of the T-State related error messages will be activated through + * DTrace + */ +#define ERR_MSG_SIZE 128 +static char err_msg[ERR_MSG_SIZE]; + +#define PRINT_ERR_MSG(err_lvl, msg, obj_type) { \ + switch (obj_type) {\ + case (PTC_OBJ): \ + case (TSS_OBJ): \ + case (TSD_OBJ): \ + case (TPC_OBJ): \ + DTRACE_PROBE1(cpu_ts_err_msg, char *, msg); \ + break; \ + default: \ + cmn_err(err_lvl, "%s", msg); \ + break; \ + } \ +} + + +/* * Cache the ACPI CPU control data objects. */ static int @@ -79,6 +104,7 @@ cpu_acpi_cache_ctrl_regs(cpu_acpi_handle_t handle, cpu_acpi_obj_t objtype, AML_RESOURCE_GENERIC_REGISTER *greg; int ret = -1; int i; + int p_res; /* * Fetch the control registers (if present) for the CPU node. @@ -97,8 +123,12 @@ cpu_acpi_cache_ctrl_regs(cpu_acpi_handle_t handle, cpu_acpi_obj_t objtype, obj = abuf.Pointer; if (obj->Package.Count != 2) { - cmn_err(CE_NOTE, "!cpu_acpi: %s package bad count %d.", - cpu_acpi_obj_attrs[objtype].name, obj->Package.Count); + p_res = snprintf(err_msg, ERR_MSG_SIZE, "!cpu_acpi: %s package" + " bad count %d.", cpu_acpi_obj_attrs[objtype].name, + obj->Package.Count); + if (p_res >= 0) + PRINT_ERR_MSG(CE_NOTE, err_msg, objtype); + goto out; } @@ -107,9 +137,11 @@ cpu_acpi_cache_ctrl_regs(cpu_acpi_handle_t handle, cpu_acpi_obj_t objtype, */ for (i = 0; i < obj->Package.Count; i++) { if (obj->Package.Elements[i].Type != ACPI_TYPE_BUFFER) { - cmn_err(CE_NOTE, "!cpu_acpi: " + p_res = snprintf(err_msg, ERR_MSG_SIZE, "!cpu_acpi: " "Unexpected data in %s package.", cpu_acpi_obj_attrs[objtype].name); + if (p_res >= 0) + PRINT_ERR_MSG(CE_NOTE, err_msg, objtype); goto out; } @@ -117,24 +149,30 @@ cpu_acpi_cache_ctrl_regs(cpu_acpi_handle_t handle, cpu_acpi_obj_t objtype, obj->Package.Elements[i].Buffer.Pointer; if (greg->DescriptorType != ACPI_RESOURCE_NAME_GENERIC_REGISTER) { - cmn_err(CE_NOTE, "!cpu_acpi: " + p_res = snprintf(err_msg, ERR_MSG_SIZE, "!cpu_acpi: " "%s package has format error.", cpu_acpi_obj_attrs[objtype].name); + if (p_res >= 0) + PRINT_ERR_MSG(CE_NOTE, err_msg, objtype); goto out; } if (greg->ResourceLength != ACPI_AML_SIZE_LARGE(AML_RESOURCE_GENERIC_REGISTER)) { - cmn_err(CE_NOTE, "!cpu_acpi: " + p_res = snprintf(err_msg, ERR_MSG_SIZE, "!cpu_acpi: " "%s package not right size.", cpu_acpi_obj_attrs[objtype].name); + if (p_res >= 0) + PRINT_ERR_MSG(CE_NOTE, err_msg, objtype); goto out; } if (greg->AddressSpaceId != ACPI_ADR_SPACE_FIXED_HARDWARE && greg->AddressSpaceId != ACPI_ADR_SPACE_SYSTEM_IO) { - cmn_err(CE_NOTE, "!cpu_apci: %s contains unsupported " - "address space type %x", + p_res = snprintf(err_msg, ERR_MSG_SIZE, "!cpu_apci: " + "%s contains unsupported address space type %x", cpu_acpi_obj_attrs[objtype].name, greg->AddressSpaceId); + if (p_res >= 0) + PRINT_ERR_MSG(CE_NOTE, err_msg, objtype); goto out; } } @@ -204,6 +242,7 @@ cpu_acpi_cache_state_dependencies(cpu_acpi_handle_t handle, ACPI_OBJECT *pkg, *elements; int number; int ret = -1; + int p_res; if (objtype == CSD_OBJ) { number = 6; @@ -228,9 +267,11 @@ cpu_acpi_cache_state_dependencies(cpu_acpi_handle_t handle, if (((objtype != CSD_OBJ) && (pkg->Package.Count != 1)) || ((objtype == CSD_OBJ) && (pkg->Package.Count != 1) && (pkg->Package.Count != 2))) { - cmn_err(CE_NOTE, "!cpu_acpi: %s unsupported package " - "count %d.", cpu_acpi_obj_attrs[objtype].name, - pkg->Package.Count); + p_res = snprintf(err_msg, ERR_MSG_SIZE, "!cpu_acpi: %s " + "unsupported package count %d.", + cpu_acpi_obj_attrs[objtype].name, pkg->Package.Count); + if (p_res >= 0) + PRINT_ERR_MSG(CE_NOTE, err_msg, objtype); goto out; } @@ -240,15 +281,20 @@ cpu_acpi_cache_state_dependencies(cpu_acpi_handle_t handle, */ if (pkg->Package.Elements[0].Type != ACPI_TYPE_PACKAGE || pkg->Package.Elements[0].Package.Count != number) { - cmn_err(CE_NOTE, "!cpu_acpi: Unexpected data in %s package.", + p_res = snprintf(err_msg, ERR_MSG_SIZE, "!cpu_acpi: " + "Unexpected data in %s package.", cpu_acpi_obj_attrs[objtype].name); + if (p_res >= 0) + PRINT_ERR_MSG(CE_NOTE, err_msg, objtype); goto out; } elements = pkg->Package.Elements[0].Package.Elements; if (elements[0].Integer.Value != number || elements[1].Integer.Value != 0) { - cmn_err(CE_NOTE, "!cpu_acpi: Unexpected %s revision.", - cpu_acpi_obj_attrs[objtype].name); + p_res = snprintf(err_msg, ERR_MSG_SIZE, "!cpu_acpi: Unexpected" + " %s revision.", cpu_acpi_obj_attrs[objtype].name); + if (p_res >= 0) + PRINT_ERR_MSG(CE_NOTE, err_msg, objtype); goto out; } @@ -397,6 +443,7 @@ cpu_acpi_cache_supported_states(cpu_acpi_handle_t handle, int ret = -1; int cnt; int i, j; + int p_res; /* * Fetch the data (if present) for the CPU node. @@ -406,14 +453,19 @@ cpu_acpi_cache_supported_states(cpu_acpi_handle_t handle, if (ACPI_FAILURE(AcpiEvaluateObjectTyped(handle->cs_handle, cpu_acpi_obj_attrs[objtype].name, NULL, &abuf, ACPI_TYPE_PACKAGE))) { - cmn_err(CE_NOTE, "!cpu_acpi: %s package not found.", - cpu_acpi_obj_attrs[objtype].name); + p_res = snprintf(err_msg, ERR_MSG_SIZE, "!cpu_acpi: %s " + "package not found.", cpu_acpi_obj_attrs[objtype].name); + if (p_res >= 0) + PRINT_ERR_MSG(CE_NOTE, err_msg, objtype); return (1); } obj = abuf.Pointer; if (obj->Package.Count < 2) { - cmn_err(CE_NOTE, "!cpu_acpi: %s package bad count %d.", - cpu_acpi_obj_attrs[objtype].name, obj->Package.Count); + p_res = snprintf(err_msg, ERR_MSG_SIZE, "!cpu_acpi: %s package" + " bad count %d.", cpu_acpi_obj_attrs[objtype].name, + obj->Package.Count); + if (p_res >= 0) + PRINT_ERR_MSG(CE_NOTE, err_msg, objtype); goto out; } @@ -424,18 +476,23 @@ cpu_acpi_cache_supported_states(cpu_acpi_handle_t handle, for (i = 0, l = NULL; i < obj->Package.Count; i++, l = q) { if (obj->Package.Elements[i].Type != ACPI_TYPE_PACKAGE || obj->Package.Elements[i].Package.Count != fcnt) { - cmn_err(CE_NOTE, "!cpu_acpi: " + p_res = snprintf(err_msg, ERR_MSG_SIZE, "!cpu_acpi: " "Unexpected data in %s package.", cpu_acpi_obj_attrs[objtype].name); + if (p_res >= 0) + PRINT_ERR_MSG(CE_NOTE, err_msg, objtype); goto out; } q = obj->Package.Elements[i].Package.Elements; for (j = 0; j < fcnt; j++) { if (q[j].Type != ACPI_TYPE_INTEGER) { - cmn_err(CE_NOTE, "!cpu_acpi: " - "%s element invalid (type)", + p_res = snprintf(err_msg, ERR_MSG_SIZE, + "!cpu_acpi: %s element invalid (type)", cpu_acpi_obj_attrs[objtype].name); + if (p_res >= 0) + PRINT_ERR_MSG(CE_NOTE, err_msg, + objtype); goto out; } } @@ -462,9 +519,11 @@ cpu_acpi_cache_supported_states(cpu_acpi_handle_t handle, * an the end-of-table entry. */ if (eot) { - cmn_err(CE_NOTE, "!cpu_acpi: " + p_res = snprintf(err_msg, ERR_MSG_SIZE, "!cpu_acpi: " "Unexpected data in %s package after eot.", cpu_acpi_obj_attrs[objtype].name); + if (p_res >= 0) + PRINT_ERR_MSG(CE_NOTE, err_msg, objtype); goto out; } @@ -472,9 +531,11 @@ cpu_acpi_cache_supported_states(cpu_acpi_handle_t handle, * states must be defined in order from highest to lowest. */ if (l != NULL && l[0].Integer.Value < q[0].Integer.Value) { - cmn_err(CE_NOTE, "!cpu_acpi: " + p_res = snprintf(err_msg, ERR_MSG_SIZE, "!cpu_acpi: " "%s package state definitions out of order.", cpu_acpi_obj_attrs[objtype].name); + if (p_res >= 0) + PRINT_ERR_MSG(CE_NOTE, err_msg, objtype); goto out; } @@ -781,21 +842,29 @@ cpu_acpi_free_pstate_data(cpu_acpi_handle_t handle) int cpu_acpi_cache_tstate_data(cpu_acpi_handle_t handle) { + int p_res; + if (cpu_acpi_cache_ptc(handle) < 0) { - cmn_err(CE_WARN, "!cpu_acpi: error parsing _PTC for " - "CPU %d", handle->cs_id); + p_res = snprintf(err_msg, ERR_MSG_SIZE, "!cpu_acpi: error " + "parsing _PTC for CPU %d", handle->cs_id); + if (p_res >= 0) + PRINT_ERR_MSG(CE_NOTE, err_msg, PTC_OBJ); return (-1); } if (cpu_acpi_cache_tstates(handle) != 0) { - cmn_err(CE_WARN, "!cpu_acpi: error parsing _TSS for " - "CPU %d", handle->cs_id); + p_res = snprintf(err_msg, ERR_MSG_SIZE, "!cpu_acpi: error " + "parsing _TSS for CPU %d", handle->cs_id); + if (p_res >= 0) + PRINT_ERR_MSG(CE_NOTE, err_msg, TSS_OBJ); return (-1); } if (cpu_acpi_cache_tsd(handle) < 0) { - cmn_err(CE_WARN, "!cpu_acpi: error parsing _TSD for " - "CPU %d", handle->cs_id); + p_res = snprintf(err_msg, ERR_MSG_SIZE, "!cpu_acpi: error " + "parsing _TSD for CPU %d", handle->cs_id); + if (p_res >= 0) + PRINT_ERR_MSG(CE_NOTE, err_msg, TSD_OBJ); return (-1); } diff --git a/usr/src/uts/i86pc/os/cpupm/cpupm_mach.c b/usr/src/uts/i86pc/os/cpupm/cpupm_mach.c index 627a426e0a..6de45d0ced 100644 --- a/usr/src/uts/i86pc/os/cpupm/cpupm_mach.c +++ b/usr/src/uts/i86pc/os/cpupm/cpupm_mach.c @@ -144,8 +144,6 @@ cpupm_init(cpu_t *cp) uint_t nspeeds; int ret; - cpupm_set_supp_freqs(cp, NULL, 1); - mach_state = cp->cpu_m.mcpu_pm_mach_state = kmem_zalloc(sizeof (cpupm_mach_state_t), KM_SLEEP); mach_state->ms_caps = CPUPM_NO_STATES; @@ -207,9 +205,13 @@ cpupm_init(cpu_t *cp) if (mach_state->ms_tstate.cma_ops != NULL) { ret = mach_state->ms_tstate.cma_ops->cpus_init(cp); if (ret != 0) { - cmn_err(CE_WARN, "!cpupm_init: processor %d:" - " unable to initialize T-state support", - cp->cpu_id); + char err_msg[128]; + int p_res; + p_res = snprintf(err_msg, sizeof (err_msg), + "!cpupm_init: processor %d: unable to initialize " + "T-state support", cp->cpu_id); + if (p_res >= 0) + DTRACE_PROBE1(cpu_ts_err_msg, char *, err_msg); mach_state->ms_tstate.cma_ops = NULL; cpupm_disable(CPUPM_T_STATES); } else { diff --git a/usr/src/uts/i86pc/os/mp_startup.c b/usr/src/uts/i86pc/os/mp_startup.c index 1c693700e8..0571c0a16b 100644 --- a/usr/src/uts/i86pc/os/mp_startup.c +++ b/usr/src/uts/i86pc/os/mp_startup.c @@ -120,6 +120,13 @@ init_cpu_info(struct cpu *cp) */ cp->cpu_curr_clock = cpu_freq_hz; + /* + * Supported frequencies. + */ + if (cp->cpu_supp_freqs == NULL) { + cpu_set_supp_freqs(cp, NULL); + } + (void) strcpy(pi->pi_processor_type, "i386"); if (fpu_exists) (void) strcpy(pi->pi_fputypes, "i387 compatible"); |