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: Bob Moore <robert.moore@intel.com> Signed-off-by: Lv Zheng <lv.zheng@intel.com> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
This commit is contained in:
parent
3c0503dd28
commit
25823e784a
@ -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
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
|
@ -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) */
|
||||||
|
@ -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
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
|
Loading…
Reference in New Issue
Block a user