Commit ae90fbf5 authored by Bob Moore's avatar Bob Moore Committed by Rafael J. Wysocki

ACPICA: Parser: Fix for SuperName method invocation

ACPICA commit 4b86d1046d06e462dae83ebcd5a66cc132a08f8f

SuperName parameters that are in fact control method invocations were
not handled correctly by the parser. This change fixes the problem
by identifying these properly as method invocations. This affects
about 14 different ASL operators that contain SuperName parameters.
ACPICA BZ 1002.

Link: https://github.com/acpica/acpica/commit/4b86d104
Link: https://bugs.acpica.org/show_bug.cgi?id=1002Signed-off-by: default avatarBob Moore <robert.moore@intel.com>
Signed-off-by: default avatarLv Zheng <lv.zheng@intel.com>
Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
parent 89438f96
...@@ -269,7 +269,8 @@ acpi_ps_get_next_namepath(struct acpi_walk_state *walk_state, ...@@ -269,7 +269,8 @@ acpi_ps_get_next_namepath(struct acpi_walk_state *walk_state,
*/ */
if (ACPI_SUCCESS(status) && if (ACPI_SUCCESS(status) &&
possible_method_call && (node->type == ACPI_TYPE_METHOD)) { possible_method_call && (node->type == ACPI_TYPE_METHOD)) {
if (walk_state->opcode == AML_UNLOAD_OP) { if (GET_CURRENT_ARG_TYPE(walk_state->arg_types) ==
ARGP_SUPERNAME) {
/* /*
* acpi_ps_get_next_namestring has increased the AML pointer, * acpi_ps_get_next_namestring has increased the AML pointer,
* so we need to restore the saved AML pointer for method call. * so we need to restore the saved AML pointer for method call.
...@@ -696,7 +697,7 @@ static union acpi_parse_object *acpi_ps_get_next_field(struct acpi_parse_state ...@@ -696,7 +697,7 @@ static union acpi_parse_object *acpi_ps_get_next_field(struct acpi_parse_state
* *
* PARAMETERS: walk_state - Current state * PARAMETERS: walk_state - Current state
* parser_state - Current parser state object * parser_state - Current parser state object
* arg_type - The argument type (AML_*_ARG) * arg_type - The parser argument type (ARGP_*)
* return_arg - Where the next arg is returned * return_arg - Where the next arg is returned
* *
* RETURN: Status, and an op object containing the next argument. * RETURN: Status, and an op object containing the next argument.
...@@ -815,9 +816,9 @@ acpi_ps_get_next_arg(struct acpi_walk_state *walk_state, ...@@ -815,9 +816,9 @@ acpi_ps_get_next_arg(struct acpi_walk_state *walk_state,
return_ACPI_STATUS(AE_NO_MEMORY); return_ACPI_STATUS(AE_NO_MEMORY);
} }
/* To support super_name arg of Unload */ /* super_name allows argument to be a method call */
if (walk_state->opcode == AML_UNLOAD_OP) { if (arg_type == ARGP_SUPERNAME) {
status = status =
acpi_ps_get_next_namepath(walk_state, acpi_ps_get_next_namepath(walk_state,
parser_state, arg, parser_state, arg,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment