summaryrefslogtreecommitdiffstats
path: root/drivers/acpi/acpica/dsdebug.c
diff options
context:
space:
mode:
authorLv Zheng <lv.zheng@intel.com>2015-07-23 06:52:53 +0200
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>2015-07-23 23:09:07 +0200
commita616dc2fe50270f1fa5050fb9cd88a08531a3f25 (patch)
tree425ee0df81280c30f004497a10a103d2e857e061 /drivers/acpi/acpica/dsdebug.c
parentACPICA: Dispatcher: Move stack traversal code to dispatcher (diff)
downloadlinux-a616dc2fe50270f1fa5050fb9cd88a08531a3f25.tar.xz
linux-a616dc2fe50270f1fa5050fb9cd88a08531a3f25.zip
ACPICA: Dispatcher: Add trace support for interpreter
ACPICA commit 71299ec8b49054daace0df50268e8e055654ca37 This patch adds trace point at the following point: 1. Begin/end of a control method execution; 2. Begin/end of an opcode execution. The trace point feature can be enabled by defining ACPI_DEBUG_OUTPUT and specifying a debug level that includes ACPI_LV_TRACDE_POINT and the debug layers that include ACPI_PARSER and ACPI_DISPACTCHER. In order to make aml_op_name of union acpi_parse_object usable for tracer, it is enabled for ACPI_DEBUG_OUTPUT in this patch. Lv Zheng. Link: https://github.com/acpica/acpica/commit/71299ec8 Signed-off-by: Lv Zheng <lv.zheng@intel.com> Signed-off-by: Bob Moore <robert.moore@intel.com> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Diffstat (limited to 'drivers/acpi/acpica/dsdebug.c')
-rw-r--r--drivers/acpi/acpica/dsdebug.c24
1 files changed, 24 insertions, 0 deletions
diff --git a/drivers/acpi/acpica/dsdebug.c b/drivers/acpi/acpica/dsdebug.c
index 21c6cefd267e..7df9b50e17a7 100644
--- a/drivers/acpi/acpica/dsdebug.c
+++ b/drivers/acpi/acpica/dsdebug.c
@@ -127,6 +127,8 @@ acpi_ds_dump_method_stack(acpi_status status,
struct acpi_thread_state *thread;
struct acpi_walk_state *next_walk_state;
struct acpi_namespace_node *previous_method = NULL;
+ union acpi_operand_object *method_desc;
+ char *pathname = NULL;
ACPI_FUNCTION_TRACE(ds_dump_method_stack);
@@ -170,6 +172,28 @@ acpi_ds_dump_method_stack(acpi_status status,
/* Walk list of linked walk states */
while (next_walk_state) {
+ method_desc = next_walk_state->method_desc;
+ if (method_desc && method_desc->method.node) {
+ pathname = acpi_ns_get_normalized_pathname((struct
+ acpi_namespace_node
+ *)
+ method_desc->
+ method.node,
+ TRUE);
+ }
+ if (pathname) {
+ ACPI_DEBUG_PRINT((ACPI_DB_TRACE_POINT,
+ "End method [0x%p:%s] execution.\n",
+ method_desc->method.aml_start,
+ pathname));
+ ACPI_FREE(pathname);
+ pathname = NULL;
+ } else {
+ ACPI_DEBUG_PRINT((ACPI_DB_TRACE_POINT,
+ "End method [0x%p] execution.\n",
+ method_desc->method.aml_start));
+ }
+
ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH,
" Method [%4.4s] executing: ",
acpi_ut_get_node_name(next_walk_state->