Mercurial > illumos > illumos-gate
changeset 10681:39bfab5e595b
6885533 error in handling the return value of ACPI _MAT method
Contributed by Gerry Liu <jiang.liu@intel.com>
author | Michael Corcoran <Michael.Corcoran@Sun.COM> |
---|---|
date | Mon, 28 Sep 2009 21:34:36 -0700 |
parents | 45bda3640f27 |
children | 4c75f60a2704 |
files | usr/src/uts/i86pc/io/acpi/acpidev/acpidev_util.c usr/src/uts/i86pc/sys/acpidev.h |
diffstat | 2 files changed, 15 insertions(+), 8 deletions(-) [+] |
line wrap: on
line diff
--- a/usr/src/uts/i86pc/io/acpi/acpidev/acpidev_util.c Tue Sep 29 12:12:23 2009 +0800 +++ b/usr/src/uts/i86pc/io/acpi/acpidev/acpidev_util.c Mon Sep 28 21:34:36 2009 -0700 @@ -232,6 +232,7 @@ 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 @@ } 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);
--- a/usr/src/uts/i86pc/sys/acpidev.h Tue Sep 29 12:12:23 2009 +0800 +++ b/usr/src/uts/i86pc/sys/acpidev.h Mon Sep 28 21:34:36 2009 -0700 @@ -79,7 +79,7 @@ #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. */