aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/acpi
diff options
context:
space:
mode:
authorLin Ming <ming.m.lin@intel.com>2008-04-10 11:06:41 -0400
committerLen Brown <len.brown@intel.com>2008-04-22 14:29:27 -0400
commite5bcc811f78f294e7be8a0721b3fb513028c5af4 (patch)
tree8545f7f57de2e3947cb73df726bfe4e3b122ad98 /drivers/acpi
parent1f549a240ccb2755066587e1e6ef9f74f485a46a (diff)
ACPICA: Fixed a problem with Index references passed as method arguments
References passed as arguments to control methods were dereferenced immediately (before control was passed to the called method). The references are now correctly passed directly to the called method. http://bugzilla.kernel.org/show_bug.cgi?id=5389 Signed-off-by: Lin Ming <ming.m.lin@intel.com> Signed-off-by: Bob Moore <robert.moore@intel.com> Signed-off-by: Alexey Starikovskiy <astarikovskiy@suse.de> Signed-off-by: Len Brown <len.brown@intel.com>
Diffstat (limited to 'drivers/acpi')
-rw-r--r--drivers/acpi/executer/exresolv.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/drivers/acpi/executer/exresolv.c b/drivers/acpi/executer/exresolv.c
index 74ab220a5924..795ec8c7363c 100644
--- a/drivers/acpi/executer/exresolv.c
+++ b/drivers/acpi/executer/exresolv.c
@@ -194,6 +194,12 @@ acpi_ex_resolve_object_to_value(union acpi_operand_object **stack_ptr,
194 194
195 case ACPI_TYPE_PACKAGE: 195 case ACPI_TYPE_PACKAGE:
196 196
197 /* If method call - leave the Reference on the stack */
198
199 if (walk_state->opcode == AML_INT_METHODCALL_OP) {
200 break;
201 }
202
197 obj_desc = *stack_desc->reference.where; 203 obj_desc = *stack_desc->reference.where;
198 if (obj_desc) { 204 if (obj_desc) {
199 /* 205 /*
@@ -210,7 +216,7 @@ acpi_ex_resolve_object_to_value(union acpi_operand_object **stack_ptr,
210 * the package, can't dereference it 216 * the package, can't dereference it
211 */ 217 */
212 ACPI_ERROR((AE_INFO, 218 ACPI_ERROR((AE_INFO,
213 "Attempt to deref an Index to NULL pkg element Idx=%p", 219 "Attempt to dereference an Index to NULL package element Idx=%p",
214 stack_desc)); 220 stack_desc));
215 status = AE_AML_UNINITIALIZED_ELEMENT; 221 status = AE_AML_UNINITIALIZED_ELEMENT;
216 } 222 }
@@ -221,7 +227,7 @@ acpi_ex_resolve_object_to_value(union acpi_operand_object **stack_ptr,
221 /* Invalid reference object */ 227 /* Invalid reference object */
222 228
223 ACPI_ERROR((AE_INFO, 229 ACPI_ERROR((AE_INFO,
224 "Unknown TargetType %X in Index/Reference obj %p", 230 "Unknown TargetType %X in Index/Reference object %p",
225 stack_desc->reference.target_type, 231 stack_desc->reference.target_type,
226 stack_desc)); 232 stack_desc));
227 status = AE_AML_INTERNAL; 233 status = AE_AML_INTERNAL;