Mercurial > illumos > illumos-gate
changeset 4872:d29c11d096f3
6589662 Error messages from cpu_acpi on install boot w/snv_70
6589155 assertion failed: domp, file: ../../common/io/ppm/ppm.c
author | mh27603 |
---|---|
date | Wed, 15 Aug 2007 18:20:22 -0700 |
parents | 617ab0770307 |
children | 015132a02239 |
files | usr/src/uts/i86pc/io/cpu_acpi.c usr/src/uts/i86pc/io/ppm_plat.c usr/src/uts/i86pc/os/cpupm.c |
diffstat | 3 files changed, 45 insertions(+), 31 deletions(-) [+] |
line wrap: on
line diff
--- a/usr/src/uts/i86pc/io/cpu_acpi.c Wed Aug 15 15:11:46 2007 -0700 +++ b/usr/src/uts/i86pc/io/cpu_acpi.c Wed Aug 15 18:20:22 2007 -0700 @@ -58,7 +58,7 @@ if (CPU_ACPI_PSTATES(handle) != NULL) kmem_free(CPU_ACPI_PSTATES(handle), CPU_ACPI_PSTATES_SIZE( - CPU_ACPI_PSTATES_COUNT(handle))); + CPU_ACPI_PSTATES_COUNT(handle))); kmem_free(handle->cs_pstates, sizeof (cpu_acpi_pstates_t)); } kmem_free(handle, sizeof (cpu_acpi_state_t)); @@ -98,7 +98,7 @@ obj = abuf.Pointer; if (obj->Package.Count != 2) { - cmn_err(CE_NOTE, "cpu_acpi: _PCT package bad count %d.", + cmn_err(CE_NOTE, "!cpu_acpi: _PCT package bad count %d.", obj->Package.Count); goto out; } @@ -108,7 +108,7 @@ */ for (i = 0; i < obj->Package.Count; i++) { if (obj->Package.Elements[i].Type != ACPI_TYPE_BUFFER) { - cmn_err(CE_NOTE, "cpu_acpi: " + cmn_err(CE_NOTE, "!cpu_acpi: " "Unexpected data in _PCT package."); goto out; } @@ -117,20 +117,20 @@ obj->Package.Elements[i].Buffer.Pointer; if (greg->DescriptorType != ACPI_RESOURCE_NAME_GENERIC_REGISTER) { - cmn_err(CE_NOTE, "cpu_acpi: " + cmn_err(CE_NOTE, "!cpu_acpi: " "_PCT package has format error."); goto out; } if (greg->ResourceLength != ACPI_AML_SIZE_LARGE(AML_RESOURCE_GENERIC_REGISTER)) { - cmn_err(CE_NOTE, "cpu_acpi: " + cmn_err(CE_NOTE, "!cpu_acpi: " "_PCT package not right size."); goto out; } if (greg->AddressSpaceId != ACPI_ADR_SPACE_FIXED_HARDWARE && greg->AddressSpaceId != ACPI_ADR_SPACE_SYSTEM_IO) { - cmn_err(CE_NOTE, "cpu_apci: _PCT contains unsupported " - "address space type %x", greg->AddressSpaceId); + cmn_err(CE_NOTE, "!cpu_apci: _PCT contains unsupported " + "address space type %x", greg->AddressSpaceId); goto out; } } @@ -182,19 +182,19 @@ pkg = abuf.Pointer; if (pkg->Package.Count != 1) { - cmn_err(CE_NOTE, "cpu_acpi: _PSD unsupported package " + cmn_err(CE_NOTE, "!cpu_acpi: _PSD unsupported package " "count %d.", pkg->Package.Count); goto out; } if (pkg->Package.Elements[0].Type != ACPI_TYPE_PACKAGE || pkg->Package.Elements[0].Package.Count != 5) { - cmn_err(CE_NOTE, "cpu_acpi: Unexpected data in _PSD package."); + cmn_err(CE_NOTE, "!cpu_acpi: Unexpected data in _PSD package."); goto out; } elements = pkg->Package.Elements[0].Package.Elements; if (elements[0].Integer.Value != 5 || elements[1].Integer.Value != 0) { - cmn_err(CE_NOTE, "cpu_acpi: Unexpected _PSD revision."); + cmn_err(CE_NOTE, "!cpu_acpi: Unexpected _PSD revision."); goto out; } psd = &CPU_ACPI_PSD(handle); @@ -238,12 +238,12 @@ abuf.Pointer = NULL; if (ACPI_FAILURE(AcpiEvaluateObjectTyped(handle->cs_handle, "_PSS", NULL, &abuf, ACPI_TYPE_PACKAGE))) { - cmn_err(CE_NOTE, "cpu_acpi: _PSS package not found."); + cmn_err(CE_NOTE, "!cpu_acpi: _PSS package not found."); return (1); } obj = abuf.Pointer; if (obj->Package.Count < 2) { - cmn_err(CE_NOTE, "cpu_acpi: _PSS package bad count %d.", + cmn_err(CE_NOTE, "!cpu_acpi: _PSS package bad count %d.", obj->Package.Count); goto out; } @@ -256,8 +256,8 @@ for (i = 0; i < obj->Package.Count; i++) { if (obj->Package.Elements[i].Type != ACPI_TYPE_PACKAGE || obj->Package.Elements[i].Package.Count != - CPU_ACPI_PSS_SIZE) { - cmn_err(CE_NOTE, "cpu_acpi: " + CPU_ACPI_PSS_SIZE) { + cmn_err(CE_NOTE, "!cpu_acpi: " "Unexpected data in _PSS package."); goto out; } @@ -265,7 +265,7 @@ q = obj->Package.Elements[i].Package.Elements; for (j = 0; j < CPU_ACPI_PSS_SIZE; j++) { if (q[j].Type != ACPI_TYPE_INTEGER) { - cmn_err(CE_NOTE, "cpu_acpi: " + cmn_err(CE_NOTE, "!cpu_acpi: " "_PSS element invalid (type)"); goto out; } @@ -290,7 +290,7 @@ * of the end-of-table entries above. */ if (eot) { - cmn_err(CE_NOTE, "cpu_acpi: " + cmn_err(CE_NOTE, "!cpu_acpi: " "Unexpected data in _PSS package after eot."); goto out; } @@ -299,7 +299,7 @@ * pstates 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: " + cmn_err(CE_NOTE, "!cpu_acpi: " "_PSS package pstate definitions out of order."); goto out; } @@ -375,19 +375,19 @@ cpu_acpi_cache_data(cpu_acpi_handle_t handle) { if (cpu_acpi_cache_pct(handle) < 0) { - cmn_err(CE_WARN, "cpu_acpi: error parsing _PCT for " + cmn_err(CE_WARN, "!cpu_acpi: error parsing _PCT for " "CPU instance %d", ddi_get_instance(handle->cs_dip)); return (-1); } if (cpu_acpi_cache_pstates(handle) != 0) { - cmn_err(CE_WARN, "cpu_acpi: error parsing _PSS for " + cmn_err(CE_WARN, "!cpu_acpi: error parsing _PSS for " "CPU instance %d", ddi_get_instance(handle->cs_dip)); return (-1); } if (cpu_acpi_cache_psd(handle) < 0) { - cmn_err(CE_WARN, "cpu_acpi: error parsing _PSD for " + cmn_err(CE_WARN, "!cpu_acpi: error parsing _PSD for " "CPU instance %d", ddi_get_instance(handle->cs_dip)); return (-1); } @@ -408,7 +408,7 @@ char path[MAXNAMELEN]; if (ACPI_FAILURE(AcpiInstallNotifyHandler(handle->cs_handle, ACPI_DEVICE_NOTIFY, handler, dip))) - cmn_err(CE_NOTE, "cpu_acpi: Unable to register _PPC " + cmn_err(CE_NOTE, "!cpu_acpi: Unable to register _PPC " "notify handler for %s", ddi_pathname(dip, path)); } @@ -459,7 +459,7 @@ { if (ACPI_FAILURE(AcpiOsWritePort(address, value, width))) { cmn_err(CE_NOTE, "cpu_acpi: error writing system IO port " - "%lx.", (long)address); + "%lx.", (long)address); return (-1); } return (0); @@ -473,7 +473,7 @@ { if (ACPI_FAILURE(AcpiOsReadPort(address, value, width))) { cmn_err(CE_NOTE, "cpu_acpi: error reading system IO port " - "%lx.", (long)address); + "%lx.", (long)address); return (-1); } return (0);
--- a/usr/src/uts/i86pc/io/ppm_plat.c Wed Aug 15 15:11:46 2007 -0700 +++ b/usr/src/uts/i86pc/io/ppm_plat.c Wed Aug 15 18:20:22 2007 -0700 @@ -97,13 +97,12 @@ /* * Get the CPU dependencies as determined by the CPU driver. If * the CPU driver didn't create a valid set of dependencies, then - * default to all CPUs in one domain. + * leave the domain as it is (which is unmanageable since + * PPM_CPU_READY is off). */ dep = cpupm_get_cpu_dependencies(); if (dep == NULL) { - cmn_err(CE_WARN, "%s: Could not retrieve CPU dependency info!", - str); - domp_old->dflags |= PPMD_CPU_READY; + PPMD(D_CPU, ("%s: No CPU dependency info!\n", str)); return; } @@ -117,7 +116,7 @@ domp = kmem_zalloc(sizeof (*domp), KM_SLEEP); domp->name = kmem_zalloc(MAXNAMELEN, KM_SLEEP); (void) snprintf(domp->name, MAXNAMELEN, "acpi_cpu_domain_%d", - dep_next->cd_dependency_id); + dep_next->cd_dependency_id); mutex_init(&domp->lock, NULL, MUTEX_DRIVER, NULL); mutex_enter(&domp->lock); domp->dflags = domit_p->dflags | PPMD_CPU_READY;
--- a/usr/src/uts/i86pc/os/cpupm.c Wed Aug 15 15:11:46 2007 -0700 +++ b/usr/src/uts/i86pc/os/cpupm.c Wed Aug 15 18:20:22 2007 -0700 @@ -85,7 +85,7 @@ static boolean_t cpupm_enabled = B_TRUE; /* - * Until all CPUs have succesfully attached, we do no allow + * Until all CPUs have succesfully attached, we do not allow * power management. */ static boolean_t cpupm_ready = B_FALSE; @@ -132,10 +132,9 @@ cpupm_cpu_node_t *nptr; if (!cpupm_dependencies_valid) - return; + return; if (cpu_dependency == -1) { - cpupm_dependencies_valid = B_FALSE; cpupm_free_cpu_dependencies(); return; } @@ -170,6 +169,7 @@ cpupm_cpu_dependency_t *this_dependency, *next_dependency; cpupm_cpu_node_t *this_node, *next_node; + cpupm_dependencies_valid = B_FALSE; this_dependency = cpupm_cpu_dependencies; while (this_dependency != NULL) { next_dependency = this_dependency->cd_next; @@ -186,6 +186,7 @@ sizeof (cpupm_cpu_dependency_t)); this_dependency = next_dependency; } + cpupm_cpu_dependencies = NULL; } /* @@ -207,6 +208,8 @@ void cpupm_enable(boolean_t enable) { + if (!enable) + cpupm_free_cpu_dependencies(); cpupm_enabled = enable; } @@ -217,9 +220,21 @@ void cpupm_post_startup() { + /* + * The CPU domain built by the PPM during CPUs attaching + * should be rebuilt with the information retrieved from + * ACPI. + */ if (cpupm_rebuild_cpu_domains != NULL) (*cpupm_rebuild_cpu_domains)(); + /* + * If CPU power management was disabled, then there + * is nothing to do. + */ + if (!cpupm_enabled) + return; + cpupm_ready = B_TRUE; if (cpupm_init_topspeed != NULL)