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

Commit 7f4ac9f9 authored by Bob Moore's avatar Bob Moore Committed by Len Brown
Browse files

ACPICA: Fix for Load/LoadTable to specify load location



Fixed a problem with the Load and LoadTable operators where
the table location within the namespace was ignored. Instead,
the table was always loaded into the root or current scope.

Signed-off-by: default avatarBob Moore <robert.moore@intel.com>
Signed-off-by: default avatarAlexey Starikovskiy <astarikovskiy@suse.de>
Signed-off-by: default avatarLen Brown <len.brown@intel.com>
parent d8841647
Loading
Loading
Loading
Loading
+2 −1
Original line number Original line Diff line number Diff line
@@ -368,7 +368,8 @@ acpi_ex_load_op(union acpi_operand_object *obj_desc,
	}
	}


	status =
	status =
	    acpi_ex_add_table(table_index, acpi_gbl_root_node, &ddb_handle);
	    acpi_ex_add_table(table_index, walk_state->scope_info->scope.node,
			      &ddb_handle);
	if (ACPI_FAILURE(status)) {
	if (ACPI_FAILURE(status)) {


		/* On error, table_ptr was deallocated above */
		/* On error, table_ptr was deallocated above */
+1 −1
Original line number Original line Diff line number Diff line
@@ -107,7 +107,7 @@ acpi_ns_load_table(acpi_native_uint table_index,
		goto unlock;
		goto unlock;
	}
	}


	status = acpi_ns_parse_table(table_index, node->child);
	status = acpi_ns_parse_table(table_index, node);
	if (ACPI_SUCCESS(status)) {
	if (ACPI_SUCCESS(status)) {
		acpi_tb_set_table_loaded_flag(table_index, TRUE);
		acpi_tb_set_table_loaded_flag(table_index, TRUE);
	} else {
	} else {
+15 −3
Original line number Original line Diff line number Diff line
@@ -64,7 +64,8 @@ ACPI_MODULE_NAME("nsparse")
 ******************************************************************************/
 ******************************************************************************/
acpi_status
acpi_status
acpi_ns_one_complete_parse(acpi_native_uint pass_number,
acpi_ns_one_complete_parse(acpi_native_uint pass_number,
			   acpi_native_uint table_index)
			   acpi_native_uint table_index,
			   struct acpi_namespace_node * start_node)
{
{
	union acpi_parse_object *parse_root;
	union acpi_parse_object *parse_root;
	acpi_status status;
	acpi_status status;
@@ -121,6 +122,13 @@ acpi_ns_one_complete_parse(acpi_native_uint pass_number,
		return_ACPI_STATUS(status);
		return_ACPI_STATUS(status);
	}
	}


	/* start_node is the default location to load the table */

	if (start_node && start_node != acpi_gbl_root_node) {
		acpi_ds_scope_stack_push(start_node, ACPI_TYPE_METHOD,
					 walk_state);
	}

	/* Parse the AML */
	/* Parse the AML */


	ACPI_DEBUG_PRINT((ACPI_DB_PARSE, "*PARSE* pass %d parse\n",
	ACPI_DEBUG_PRINT((ACPI_DB_PARSE, "*PARSE* pass %d parse\n",
@@ -163,7 +171,9 @@ acpi_ns_parse_table(acpi_native_uint table_index,
	 * performs another complete parse of the AML.
	 * performs another complete parse of the AML.
	 */
	 */
	ACPI_DEBUG_PRINT((ACPI_DB_PARSE, "**** Start pass 1\n"));
	ACPI_DEBUG_PRINT((ACPI_DB_PARSE, "**** Start pass 1\n"));
	status = acpi_ns_one_complete_parse(ACPI_IMODE_LOAD_PASS1, table_index);
	status =
	    acpi_ns_one_complete_parse(ACPI_IMODE_LOAD_PASS1, table_index,
				       start_node);
	if (ACPI_FAILURE(status)) {
	if (ACPI_FAILURE(status)) {
		return_ACPI_STATUS(status);
		return_ACPI_STATUS(status);
	}
	}
@@ -178,7 +188,9 @@ acpi_ns_parse_table(acpi_native_uint table_index,
	 * parse objects are all cached.
	 * parse objects are all cached.
	 */
	 */
	ACPI_DEBUG_PRINT((ACPI_DB_PARSE, "**** Start pass 2\n"));
	ACPI_DEBUG_PRINT((ACPI_DB_PARSE, "**** Start pass 2\n"));
	status = acpi_ns_one_complete_parse(ACPI_IMODE_LOAD_PASS2, table_index);
	status =
	    acpi_ns_one_complete_parse(ACPI_IMODE_LOAD_PASS2, table_index,
				       start_node);
	if (ACPI_FAILURE(status)) {
	if (ACPI_FAILURE(status)) {
		return_ACPI_STATUS(status);
		return_ACPI_STATUS(status);
	}
	}
+2 −1
Original line number Original line Diff line number Diff line
@@ -113,7 +113,8 @@ acpi_ns_parse_table(acpi_native_uint table_index,


acpi_status
acpi_status
acpi_ns_one_complete_parse(acpi_native_uint pass_number,
acpi_ns_one_complete_parse(acpi_native_uint pass_number,
			   acpi_native_uint table_index);
			   acpi_native_uint table_index,
			   struct acpi_namespace_node *start_node);


/*
/*
 * nsaccess - Top-level namespace access
 * nsaccess - Top-level namespace access