diff options
Diffstat (limited to 'drivers/acpi/dispatcher/dsmethod.c')
-rw-r--r-- | drivers/acpi/dispatcher/dsmethod.c | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/drivers/acpi/dispatcher/dsmethod.c b/drivers/acpi/dispatcher/dsmethod.c index e348db0e541e..21f059986273 100644 --- a/drivers/acpi/dispatcher/dsmethod.c +++ b/drivers/acpi/dispatcher/dsmethod.c | |||
@@ -231,7 +231,7 @@ acpi_ds_call_control_method(struct acpi_thread_state *thread, | |||
231 | struct acpi_namespace_node *method_node; | 231 | struct acpi_namespace_node *method_node; |
232 | struct acpi_walk_state *next_walk_state = NULL; | 232 | struct acpi_walk_state *next_walk_state = NULL; |
233 | union acpi_operand_object *obj_desc; | 233 | union acpi_operand_object *obj_desc; |
234 | struct acpi_parameter_info info; | 234 | struct acpi_evaluate_info *info; |
235 | u32 i; | 235 | u32 i; |
236 | 236 | ||
237 | ACPI_FUNCTION_TRACE_PTR(ds_call_control_method, this_walk_state); | 237 | ACPI_FUNCTION_TRACE_PTR(ds_call_control_method, this_walk_state); |
@@ -319,12 +319,24 @@ acpi_ds_call_control_method(struct acpi_thread_state *thread, | |||
319 | */ | 319 | */ |
320 | this_walk_state->operands[this_walk_state->num_operands] = NULL; | 320 | this_walk_state->operands[this_walk_state->num_operands] = NULL; |
321 | 321 | ||
322 | info.parameters = &this_walk_state->operands[0]; | 322 | /* |
323 | info.parameter_type = ACPI_PARAM_ARGS; | 323 | * Allocate and initialize the evaluation information block |
324 | * TBD: this is somewhat inefficient, should change interface to | ||
325 | * ds_init_aml_walk. For now, keeps this struct off the CPU stack | ||
326 | */ | ||
327 | info = ACPI_ALLOCATE_ZEROED(sizeof(struct acpi_evaluate_info)); | ||
328 | if (!info) { | ||
329 | return_ACPI_STATUS(AE_NO_MEMORY); | ||
330 | } | ||
331 | |||
332 | info->parameters = &this_walk_state->operands[0]; | ||
333 | info->parameter_type = ACPI_PARAM_ARGS; | ||
324 | 334 | ||
325 | status = acpi_ds_init_aml_walk(next_walk_state, NULL, method_node, | 335 | status = acpi_ds_init_aml_walk(next_walk_state, NULL, method_node, |
326 | obj_desc->method.aml_start, | 336 | obj_desc->method.aml_start, |
327 | obj_desc->method.aml_length, &info, 3); | 337 | obj_desc->method.aml_length, info, 3); |
338 | |||
339 | ACPI_FREE(info); | ||
328 | if (ACPI_FAILURE(status)) { | 340 | if (ACPI_FAILURE(status)) { |
329 | goto cleanup; | 341 | goto cleanup; |
330 | } | 342 | } |