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

Commit 25823e78 authored by Bob Moore's avatar Bob Moore Committed by Rafael J. Wysocki
Browse files

ACPICA: Add additional debug info/statements

ACPICA commit 74094ca9f51e2652a9b5f01722d8640a653cc75a

For _REG methods and module-level code blocks.
For acpiexec, add deletion of module-level blocks in case
of an early abort.

Link: https://github.com/acpica/acpica/commit/74094ca9


Signed-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 3c0503dd
Loading
Loading
Loading
Loading
+7 −0
Original line number Original line Diff line number Diff line
@@ -406,6 +406,13 @@ struct acpi_simple_repair_info {


#define ACPI_NUM_RTYPES                 5	/* Number of actual object types */
#define ACPI_NUM_RTYPES                 5	/* Number of actual object types */


/* Info for running the _REG methods */

struct acpi_reg_walk_info {
	acpi_adr_space_type space_id;
	u32 reg_run_count;
};

/*****************************************************************************
/*****************************************************************************
 *
 *
 * Event typedefs and structs
 * Event typedefs and structs
+18 −4
Original line number Original line Diff line number Diff line
@@ -626,9 +626,17 @@ acpi_ev_execute_reg_methods(struct acpi_namespace_node *node,
			    acpi_adr_space_type space_id)
			    acpi_adr_space_type space_id)
{
{
	acpi_status status;
	acpi_status status;
	struct acpi_reg_walk_info info;


	ACPI_FUNCTION_TRACE(ev_execute_reg_methods);
	ACPI_FUNCTION_TRACE(ev_execute_reg_methods);


	info.space_id = space_id;
	info.reg_run_count = 0;

	ACPI_DEBUG_PRINT_RAW((ACPI_DB_NAMES,
			      "    Running _REG methods for SpaceId %s\n",
			      acpi_ut_get_region_name(info.space_id)));

	/*
	/*
	 * Run all _REG methods for all Operation Regions for this space ID. This
	 * Run all _REG methods for all Operation Regions for this space ID. This
	 * is a separate walk in order to handle any interdependencies between
	 * is a separate walk in order to handle any interdependencies between
@@ -637,7 +645,7 @@ acpi_ev_execute_reg_methods(struct acpi_namespace_node *node,
	 */
	 */
	status = acpi_ns_walk_namespace(ACPI_TYPE_ANY, node, ACPI_UINT32_MAX,
	status = acpi_ns_walk_namespace(ACPI_TYPE_ANY, node, ACPI_UINT32_MAX,
					ACPI_NS_WALK_UNLOCK, acpi_ev_reg_run,
					ACPI_NS_WALK_UNLOCK, acpi_ev_reg_run,
					NULL, &space_id, NULL);
					NULL, &info, NULL);


	/* Special case for EC: handle "orphan" _REG methods with no region */
	/* Special case for EC: handle "orphan" _REG methods with no region */


@@ -645,6 +653,11 @@ acpi_ev_execute_reg_methods(struct acpi_namespace_node *node,
		acpi_ev_orphan_ec_reg_method(node);
		acpi_ev_orphan_ec_reg_method(node);
	}
	}


	ACPI_DEBUG_PRINT_RAW((ACPI_DB_NAMES,
			      "    Executed %u _REG methods for SpaceId %s\n",
			      info.reg_run_count,
			      acpi_ut_get_region_name(info.space_id)));

	return_ACPI_STATUS(status);
	return_ACPI_STATUS(status);
}
}


@@ -664,10 +677,10 @@ acpi_ev_reg_run(acpi_handle obj_handle,
{
{
	union acpi_operand_object *obj_desc;
	union acpi_operand_object *obj_desc;
	struct acpi_namespace_node *node;
	struct acpi_namespace_node *node;
	acpi_adr_space_type space_id;
	acpi_status status;
	acpi_status status;
	struct acpi_reg_walk_info *info;


	space_id = *ACPI_CAST_PTR(acpi_adr_space_type, context);
	info = ACPI_CAST_PTR(struct acpi_reg_walk_info, context);


	/* Convert and validate the device handle */
	/* Convert and validate the device handle */


@@ -696,13 +709,14 @@ acpi_ev_reg_run(acpi_handle obj_handle,


	/* Object is a Region */
	/* Object is a Region */


	if (obj_desc->region.space_id != space_id) {
	if (obj_desc->region.space_id != info->space_id) {


		/* This region is for a different address space, just ignore it */
		/* This region is for a different address space, just ignore it */


		return (AE_OK);
		return (AE_OK);
	}
	}


	info->reg_run_count++;
	status = acpi_ev_execute_reg_method(obj_desc, ACPI_REG_CONNECT);
	status = acpi_ev_execute_reg_method(obj_desc, ACPI_REG_CONNECT);
	return (status);
	return (status);
}
}
+2 −1
Original line number Original line Diff line number Diff line
@@ -465,7 +465,8 @@ acpi_ns_exec_module_code(union acpi_operand_object *method_obj,


	status = acpi_ns_evaluate(info);
	status = acpi_ns_evaluate(info);


	ACPI_DEBUG_PRINT((ACPI_DB_INIT, "Executed module-level code at %p\n",
	ACPI_DEBUG_PRINT((ACPI_DB_INIT_NAMES,
			  "Executed module-level code at %p\n",
			  method_obj->method.aml_start));
			  method_obj->method.aml_start));


	/* Delete a possible implicit return value (in slack mode) */
	/* Delete a possible implicit return value (in slack mode) */
+17 −0
Original line number Original line Diff line number Diff line
@@ -596,6 +596,23 @@ void acpi_ns_terminate(void)


	ACPI_FUNCTION_TRACE(ns_terminate);
	ACPI_FUNCTION_TRACE(ns_terminate);


#ifdef ACPI_EXEC_APP
	{
		union acpi_operand_object *prev;
		union acpi_operand_object *next;

		/* Delete any module-level code blocks */

		next = acpi_gbl_module_code_list;
		while (next) {
			prev = next;
			next = next->method.mutex;
			prev->method.mutex = NULL;	/* Clear the Mutex (cheated) field */
			acpi_ut_remove_reference(prev);
		}
	}
#endif

	/*
	/*
	 * Free the entire namespace -- all nodes and all objects
	 * Free the entire namespace -- all nodes and all objects
	 * attached to the nodes
	 * attached to the nodes
+13 −1
Original line number Original line Diff line number Diff line
@@ -321,6 +321,8 @@ acpi_ps_link_module_code(union acpi_parse_object *parent_op,
	union acpi_operand_object *method_obj;
	union acpi_operand_object *method_obj;
	struct acpi_namespace_node *parent_node;
	struct acpi_namespace_node *parent_node;


	ACPI_FUNCTION_TRACE(ps_link_module_code);

	/* Get the tail of the list */
	/* Get the tail of the list */


	prev = next = acpi_gbl_module_code_list;
	prev = next = acpi_gbl_module_code_list;
@@ -340,9 +342,13 @@ acpi_ps_link_module_code(union acpi_parse_object *parent_op,


		method_obj = acpi_ut_create_internal_object(ACPI_TYPE_METHOD);
		method_obj = acpi_ut_create_internal_object(ACPI_TYPE_METHOD);
		if (!method_obj) {
		if (!method_obj) {
			return;
			return_VOID;
		}
		}


		ACPI_DEBUG_PRINT((ACPI_DB_PARSE,
				  "Create/Link new code block: %p\n",
				  method_obj));

		if (parent_op->common.node) {
		if (parent_op->common.node) {
			parent_node = parent_op->common.node;
			parent_node = parent_op->common.node;
		} else {
		} else {
@@ -367,8 +373,14 @@ acpi_ps_link_module_code(union acpi_parse_object *parent_op,
			prev->method.mutex = method_obj;
			prev->method.mutex = method_obj;
		}
		}
	} else {
	} else {
		ACPI_DEBUG_PRINT((ACPI_DB_PARSE,
				  "Appending to existing code block: %p\n",
				  prev));

		prev->method.aml_length += aml_length;
		prev->method.aml_length += aml_length;
	}
	}

	return_VOID;
}
}


/*******************************************************************************
/*******************************************************************************