summaryrefslogtreecommitdiff
path: root/usr/src
diff options
context:
space:
mode:
authorMichael Corcoran <Michael.Corcoran@Sun.COM>2009-09-28 21:34:36 -0700
committerMichael Corcoran <Michael.Corcoran@Sun.COM>2009-09-28 21:34:36 -0700
commit3b17bf656ccff642e3bb47eab92a32f02dff5e97 (patch)
tree78c5a42f37a4cea40620307eb88c6a5d589f8a65 /usr/src
parentcaf05df5c10c960028f122b1b02a3f7d8f892c31 (diff)
downloadillumos-gate-3b17bf656ccff642e3bb47eab92a32f02dff5e97.tar.gz
6885533 error in handling the return value of ACPI _MAT method
Contributed by Gerry Liu <jiang.liu@intel.com>
Diffstat (limited to 'usr/src')
-rw-r--r--usr/src/uts/i86pc/io/acpi/acpidev/acpidev_util.c21
-rw-r--r--usr/src/uts/i86pc/sys/acpidev.h2
2 files changed, 15 insertions, 8 deletions
diff --git a/usr/src/uts/i86pc/io/acpi/acpidev/acpidev_util.c b/usr/src/uts/i86pc/io/acpi/acpidev/acpidev_util.c
index 7c4c0c7323..beac0f523b 100644
--- a/usr/src/uts/i86pc/io/acpi/acpidev/acpidev_util.c
+++ b/usr/src/uts/i86pc/io/acpi/acpidev/acpidev_util.c
@@ -232,6 +232,7 @@ acpidev_walk_apic(ACPI_BUFFER *bufp, ACPI_HANDLE hdl, char *method,
ACPI_STATUS rc;
ssize_t len;
ACPI_BUFFER buf;
+ ACPI_OBJECT *obj;
ACPI_SUBTABLE_HEADER *ap;
ACPI_TABLE_MADT *mp = NULL;
@@ -252,17 +253,23 @@ acpidev_walk_apic(ACPI_BUFFER *bufp, ACPI_HANDLE hdl, char *method,
} else if (method != NULL) {
/*
* Otherwise, if we have an evaluate method, we get the walk
- * buffer from a successful invocation of AcpiEvaluateObject.
+ * buffer from a successful invocation of
+ * AcpiEvaluateObjectTyped().
*/
ASSERT(hdl != NULL);
- rc = AcpiEvaluateObject(hdl, method, NULL, &buf);
- if (ACPI_FAILURE(rc) && rc != AE_NOT_FOUND) {
- cmn_err(CE_WARN, "!acpidev: failed to evaluate %s "
- "in acpidev_walk_apic().", method);
+ rc = AcpiEvaluateObjectTyped(hdl, method, NULL, &buf,
+ ACPI_TYPE_BUFFER);
+ if (ACPI_SUCCESS(rc)) {
+ ASSERT(buf.Length >= sizeof (*obj));
+ obj = buf.Pointer;
+ ap = (ACPI_SUBTABLE_HEADER *)obj->Buffer.Pointer;
+ len = obj->Buffer.Length;
+ } else {
+ if (rc != AE_NOT_FOUND)
+ cmn_err(CE_WARN, "!acpidev: failed to evaluate "
+ "%s in acpidev_walk_apic().", method);
return (rc);
}
- ap = (ACPI_SUBTABLE_HEADER *)buf.Pointer;
- len = buf.Length;
} else {
/* As a last resort, walk the MADT table. */
rc = AcpiGetTable(ACPI_SIG_MADT, 1, (ACPI_TABLE_HEADER **)&mp);
diff --git a/usr/src/uts/i86pc/sys/acpidev.h b/usr/src/uts/i86pc/sys/acpidev.h
index c3cac2cb4b..e0fbaa4999 100644
--- a/usr/src/uts/i86pc/sys/acpidev.h
+++ b/usr/src/uts/i86pc/sys/acpidev.h
@@ -79,7 +79,7 @@ extern "C" {
#define ACPIDEV_TYPE_SCOPE "acpiscope"
#define ACPIDEV_TYPE_DEVICE "acpidevice"
#define ACPIDEV_TYPE_CONTAINER "acpicontainer"
-#define ACPIDEV_TYPE_CPU "cpu"
+#define ACPIDEV_TYPE_CPU "acpicpu"
#define ACPIDEV_TYPE_MEMORY "acpimemory"
/* Device property names for ACPI objects. */