aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/acpi/dispatcher/dsmethod.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/acpi/dispatcher/dsmethod.c')
-rw-r--r--drivers/acpi/dispatcher/dsmethod.c20
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 }