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>
diff --git a/drivers/acpi/acpica/dsmethod.c b/drivers/acpi/acpica/dsmethod.c
index e0ae8f4..0fa6f19 100644
--- a/drivers/acpi/acpica/dsmethod.c
+++ b/drivers/acpi/acpica/dsmethod.c
@@ -327,6 +327,7 @@
 			       struct acpi_walk_state *walk_state)
 {
 	acpi_status status = AE_OK;
+	char *pathname = NULL;
 
 	ACPI_FUNCTION_TRACE_PTR(ds_begin_method_execution, method_node);
 
@@ -334,6 +335,18 @@
 		return_ACPI_STATUS(AE_NULL_ENTRY);
 	}
 
+	pathname = acpi_ns_get_normalized_pathname(method_node, TRUE);
+	if (pathname) {
+		ACPI_DEBUG_PRINT((ACPI_DB_TRACE_POINT,
+				  "Begin method [0x%p:%s] execution.\n",
+				  obj_desc->method.aml_start, pathname));
+		ACPI_FREE(pathname);
+	} else {
+		ACPI_DEBUG_PRINT((ACPI_DB_TRACE_POINT,
+				  "Begin method [0x%p] execution.\n",
+				  obj_desc->method.aml_start));
+	}
+
 	/* Prevent wraparound of thread count */
 
 	if (obj_desc->method.thread_count == ACPI_UINT8_MAX) {
@@ -695,6 +708,7 @@
 acpi_ds_terminate_control_method(union acpi_operand_object *method_desc,
 				 struct acpi_walk_state *walk_state)
 {
+	char *pathname = NULL;
 
 	ACPI_FUNCTION_TRACE_PTR(ds_terminate_control_method, walk_state);
 
@@ -832,5 +846,22 @@
 		}
 	}
 
+	if (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);
+	} else {
+		ACPI_DEBUG_PRINT((ACPI_DB_TRACE_POINT,
+				  "End method [0x%p] execution.\n",
+				  method_desc->method.aml_start));
+	}
+
 	return_VOID;
 }