Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c91d924e authored by Bob Moore's avatar Bob Moore Committed by Andi Kleen
Browse files

ACPICA: Fix for hang on GPE method invocation



Fixes problem where the new method argument count validation mechanism
will enter an infinite loop when a GPE method is dispatched.
Problem fixed be removing the obsolete code that passes GPE block
information to the notify handler via the control method parameter pointer.

Signed-off-by: default avatarBob Moore <robert.moore@intel.com>
Signed-off-by: default avatarLin Ming <ming.m.lin@intel.com>
Signed-off-by: default avatarLen Brown <len.brown@intel.com>
Signed-off-by: default avatarAndi Kleen <ak@linux.intel.com>
parent f3454ae8
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -377,7 +377,6 @@ acpi_ds_call_control_method(struct acpi_thread_state *thread,
	}

	info->parameters = &this_walk_state->operands[0];
	info->parameter_type = ACPI_PARAM_ARGS;

	status = acpi_ds_init_aml_walk(next_walk_state, NULL, method_node,
				       obj_desc->method.aml_start,
+2 −8
Original line number Diff line number Diff line
@@ -615,15 +615,9 @@ acpi_ds_init_aml_walk(struct acpi_walk_state *walk_state,
	walk_state->pass_number = pass_number;

	if (info) {
		if (info->parameter_type == ACPI_PARAM_GPE) {
			walk_state->gpe_event_info =
			    ACPI_CAST_PTR(struct acpi_gpe_event_info,
					  info->parameters);
		} else {
		walk_state->params = info->parameters;
		walk_state->caller_return_desc = &info->return_object;
	}
	}

	status = acpi_ps_init_scope(&walk_state->parser_state, op);
	if (ACPI_FAILURE(status)) {
+0 −4
Original line number Diff line number Diff line
@@ -565,10 +565,6 @@ static void ACPI_SYSTEM_XFACE acpi_ev_asynch_execute_gpe_method(void *context)
			 */
			info->prefix_node =
			    local_gpe_event_info.dispatch.method_node;
			info->parameters =
			    ACPI_CAST_PTR(union acpi_operand_object *,
					  gpe_event_info);
			info->parameter_type = ACPI_PARAM_GPE;
			info->flags = ACPI_IGNORE_RETURN_VALUE;

			status = acpi_ns_evaluate(info);
+0 −1
Original line number Diff line number Diff line
@@ -219,7 +219,6 @@ acpi_ev_execute_reg_method(union acpi_operand_object *region_obj, u32 function)
	info->prefix_node = region_obj2->extra.method_REG;
	info->pathname = NULL;
	info->parameters = args;
	info->parameter_type = ACPI_PARAM_ARGS;
	info->flags = ACPI_IGNORE_RETURN_VALUE;

	/*
+0 −1
Original line number Diff line number Diff line
@@ -542,7 +542,6 @@ acpi_ns_init_one_device(acpi_handle obj_handle,
	info->prefix_node = device_node;
	info->pathname = METHOD_NAME__INI;
	info->parameters = NULL;
	info->parameter_type = ACPI_PARAM_ARGS;
	info->flags = ACPI_IGNORE_RETURN_VALUE;

	/*
Loading