From 0f2394bf57ca726c0806a3e8d370f5d9dbde808c Mon Sep 17 00:00:00 2001 From: Lin Ming Date: Tue, 13 Oct 2009 10:23:20 +0800 Subject: [PATCH] --- yaml --- r: 174329 b: refs/heads/master c: 0240d7b4f20f7d156a74dfdd0647a0231b7e8ef4 h: refs/heads/master i: 174327: 306d6cca79ab899043b299892feb9ed97f5fca8f v: v3 --- [refs] | 2 +- trunk/drivers/acpi/acpica/nsrepair.c | 23 +++++++++++++++++++++-- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/[refs] b/[refs] index 516e66492df8..0d4e8578a0c3 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 2752699392b828edf3123f911f6e8b4dd7daeb56 +refs/heads/master: 0240d7b4f20f7d156a74dfdd0647a0231b7e8ef4 diff --git a/trunk/drivers/acpi/acpica/nsrepair.c b/trunk/drivers/acpi/acpica/nsrepair.c index dfa31c5ba6c3..f2f5269fed6d 100644 --- a/trunk/drivers/acpi/acpica/nsrepair.c +++ b/trunk/drivers/acpi/acpica/nsrepair.c @@ -44,6 +44,7 @@ #include #include "accommon.h" #include "acnamesp.h" +#include "acinterp.h" #include "acpredef.h" #define _COMPONENT ACPI_NAMESPACE @@ -76,6 +77,7 @@ acpi_ns_repair_object(struct acpi_predefined_data *data, union acpi_operand_object *return_object = *return_object_ptr; union acpi_operand_object *new_object; acpi_size length; + acpi_status status; /* * At this point, we know that the type of the returned object was not @@ -120,9 +122,26 @@ acpi_ns_repair_object(struct acpi_predefined_data *data, case ACPI_TYPE_INTEGER: - /* Does the method/object legally return a string? */ + /* 1) Does the method/object legally return a buffer? */ + + if (expected_btypes & ACPI_RTYPE_BUFFER) { + /* + * Convert the Integer to a packed-byte buffer. _MAT needs + * this sometimes, if a read has been performed on a Field + * object that is less than or equal to the global integer + * size (32 or 64 bits). + */ + status = + acpi_ex_convert_to_buffer(return_object, + &new_object); + if (ACPI_FAILURE(status)) { + return (status); + } + } + + /* 2) Does the method/object legally return a string? */ - if (expected_btypes & ACPI_RTYPE_STRING) { + else if (expected_btypes & ACPI_RTYPE_STRING) { /* * The only supported Integer-to-String conversion is to convert * an integer of value 0 to a NULL string. The last element of