acpica-devel.lists.linux.dev archive mirror
 help / color / mirror / Atom feed
* [PATCH] ACPICA: Add support for printing AML arguments when trace point enabled
@ 2025-04-15 19:26 Mario Limonciello
  2025-04-17  2:31 ` kernel test robot
  0 siblings, 1 reply; 2+ messages in thread
From: Mario Limonciello @ 2025-04-15 19:26 UTC (permalink / raw)
  To: mario.limonciello, robert.moore, rafael.j.wysocki
  Cc: linux-acpi, acpica-devel

From: Mario Limonciello <mario.limonciello@amd.com>

When debug level is set to `ACPI_LV_TRACE_POINT` method start and
exit are emitted into the debug logs. This can be useful to understand
call paths, however none of the arguments for the method calls are
populated even when turning up other debug levels.

This can be useful for BIOSes that contain debug strings to see those
strings. When `ACPI_LV_TRACE_POINT` is set also output all of the arguments
for a given method call.

This enables this type of debugging:

```
extrace-0138 ex_trace_point        : Method Begin [0x0000000096b240c4:\M460] execution.
extrace-0173 ex_trace_args         :  "  POST CODE: %X  ACPI TIMER: %X  TIME: %d.%d ms\n", b0003f53, 1a26a8b2, 0, 15e, 0, 0
extrace-0138 ex_trace_point        : Method End [0x0000000096b240c4:\M460] execution.
```

Link: https://github.com/acpica/acpica/commit/08219d91b5678ae2fae6e4f208df790a4e108c1c
Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
---
This is a backport from upstream ACPICA.  I'm not sure if there is a script
that converts code style, so I just manually adjusted to kernel code style.
It is really useful for me for debugging; so I would ideally like to see it
go for 6.16 if possible.
---
 drivers/acpi/acpica/acinterp.h |  3 +++
 drivers/acpi/acpica/dsmthdat.c |  1 +
 drivers/acpi/acpica/extrace.c  | 49 ++++++++++++++++++++++++++++++++++
 3 files changed, 53 insertions(+)

diff --git a/drivers/acpi/acpica/acinterp.h b/drivers/acpi/acpica/acinterp.h
index 955114c926bd0..d02779ee92103 100644
--- a/drivers/acpi/acpica/acinterp.h
+++ b/drivers/acpi/acpica/acinterp.h
@@ -120,6 +120,9 @@ void
 acpi_ex_trace_point(acpi_trace_event_type type,
 		    u8 begin, u8 *aml, char *pathname);
 
+void
+acpi_ex_trace_args(union acpi_operand_object **params, u32 count);
+
 /*
  * exfield - ACPI AML (p-code) execution - field manipulation
  */
diff --git a/drivers/acpi/acpica/dsmthdat.c b/drivers/acpi/acpica/dsmthdat.c
index eca50517ad824..5393de4dbc4ca 100644
--- a/drivers/acpi/acpica/dsmthdat.c
+++ b/drivers/acpi/acpica/dsmthdat.c
@@ -188,6 +188,7 @@ acpi_ds_method_data_init_args(union acpi_operand_object **params,
 
 		index++;
 	}
+	acpi_ex_trace_args(params, index);
 
 	ACPI_DEBUG_PRINT((ACPI_DB_EXEC, "%u args passed to method\n", index));
 	return_ACPI_STATUS(AE_OK);
diff --git a/drivers/acpi/acpica/extrace.c b/drivers/acpi/acpica/extrace.c
index b5e4bb4ae3ce6..4a2a1eda1b25d 100644
--- a/drivers/acpi/acpica/extrace.c
+++ b/drivers/acpi/acpica/extrace.c
@@ -147,6 +147,55 @@ acpi_ex_trace_point(acpi_trace_event_type type,
 	}
 }
 
+/*******************************************************************************
+ *
+ * FUNCTION:    acpi_ex_trace_args
+ *
+ * PARAMETERS:  params            - AML method arguments
+ *              count             - numer of method arguments
+ *
+ * RETURN:      None
+ *
+ * DESCRIPTION: Trace any arguments
+ *
+ ******************************************************************************/
+
+void
+acpi_ex_trace_args(union acpi_operand_object **params, u32 count)
+{
+	u32 i;
+
+	ACPI_FUNCTION_NAME(ex_trace_args);
+
+	for (i = 0; i < count; i++) {
+		union acpi_operand_object *obj_desc = params[i];
+
+		if (!i)
+			ACPI_DEBUG_PRINT((ACPI_DB_TRACE_POINT, " "));
+
+		switch (obj_desc->common.type) {
+		case ACPI_TYPE_INTEGER:
+			ACPI_DEBUG_PRINT_RAW((ACPI_DB_TRACE_POINT, "%llx", obj_desc->integer.value));
+			break;
+		case ACPI_TYPE_STRING:
+			if (!obj_desc->string.length) {
+				ACPI_DEBUG_PRINT_RAW((ACPI_DB_TRACE_POINT, "NULL"));
+				continue;
+			}
+			if (ACPI_IS_DEBUG_ENABLED(ACPI_LV_TRACE_POINT, _COMPONENT))
+				acpi_ut_print_string(obj_desc->string.pointer, ACPI_UINT8_MAX);
+			break;
+		default:
+			ACPI_DEBUG_PRINT_RAW((ACPI_DB_TRACE_POINT, "Unknown"));
+			break;
+		}
+		if (i+1 == count)
+			ACPI_DEBUG_PRINT_RAW((ACPI_DB_TRACE_POINT, "\n"));
+		else
+			ACPI_DEBUG_PRINT_RAW((ACPI_DB_TRACE_POINT, ", "));
+	}
+}
+
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ex_start_trace_method
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH] ACPICA: Add support for printing AML arguments when trace point enabled
  2025-04-15 19:26 [PATCH] ACPICA: Add support for printing AML arguments when trace point enabled Mario Limonciello
@ 2025-04-17  2:31 ` kernel test robot
  0 siblings, 0 replies; 2+ messages in thread
From: kernel test robot @ 2025-04-17  2:31 UTC (permalink / raw)
  To: Mario Limonciello, mario.limonciello, robert.moore,
	rafael.j.wysocki
  Cc: oe-kbuild-all, linux-acpi, acpica-devel

Hi Mario,

kernel test robot noticed the following build warnings:

[auto build test WARNING on rafael-pm/linux-next]
[also build test WARNING on rafael-pm/bleeding-edge linus/master v6.15-rc2 next-20250416]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url:    https://github.com/intel-lab-lkp/linux/commits/Mario-Limonciello/ACPICA-Add-support-for-printing-AML-arguments-when-trace-point-enabled/20250416-125019
base:   https://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm.git linux-next
patch link:    https://lore.kernel.org/r/20250415192614.2042036-1-superm1%40kernel.org
patch subject: [PATCH] ACPICA: Add support for printing AML arguments when trace point enabled
config: i386-buildonly-randconfig-006-20250417 (https://download.01.org/0day-ci/archive/20250417/202504171023.J2JiUDFj-lkp@intel.com/config)
compiler: gcc-12 (Debian 12.2.0-14) 12.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250417/202504171023.J2JiUDFj-lkp@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202504171023.J2JiUDFj-lkp@intel.com/

All warnings (new ones prefixed by >>):

   drivers/acpi/acpica/extrace.c: In function 'acpi_ex_trace_args':
>> drivers/acpi/acpica/extrace.c:174:69: warning: suggest braces around empty body in an 'if' statement [-Wempty-body]
     174 |                         ACPI_DEBUG_PRINT((ACPI_DB_TRACE_POINT, " "));
         |                                                                     ^
>> drivers/acpi/acpica/extrace.c:195:74: warning: suggest braces around empty body in an 'else' statement [-Wempty-body]
     195 |                         ACPI_DEBUG_PRINT_RAW((ACPI_DB_TRACE_POINT, ", "));
         |                                                                          ^


vim +/if +174 drivers/acpi/acpica/extrace.c

   149	
   150	/*******************************************************************************
   151	 *
   152	 * FUNCTION:    acpi_ex_trace_args
   153	 *
   154	 * PARAMETERS:  params            - AML method arguments
   155	 *              count             - numer of method arguments
   156	 *
   157	 * RETURN:      None
   158	 *
   159	 * DESCRIPTION: Trace any arguments
   160	 *
   161	 ******************************************************************************/
   162	
   163	void
   164	acpi_ex_trace_args(union acpi_operand_object **params, u32 count)
   165	{
   166		u32 i;
   167	
   168		ACPI_FUNCTION_NAME(ex_trace_args);
   169	
   170		for (i = 0; i < count; i++) {
   171			union acpi_operand_object *obj_desc = params[i];
   172	
   173			if (!i)
 > 174				ACPI_DEBUG_PRINT((ACPI_DB_TRACE_POINT, " "));
   175	
   176			switch (obj_desc->common.type) {
   177			case ACPI_TYPE_INTEGER:
   178				ACPI_DEBUG_PRINT_RAW((ACPI_DB_TRACE_POINT, "%llx", obj_desc->integer.value));
   179				break;
   180			case ACPI_TYPE_STRING:
   181				if (!obj_desc->string.length) {
   182					ACPI_DEBUG_PRINT_RAW((ACPI_DB_TRACE_POINT, "NULL"));
   183					continue;
   184				}
   185				if (ACPI_IS_DEBUG_ENABLED(ACPI_LV_TRACE_POINT, _COMPONENT))
   186					acpi_ut_print_string(obj_desc->string.pointer, ACPI_UINT8_MAX);
   187				break;
   188			default:
   189				ACPI_DEBUG_PRINT_RAW((ACPI_DB_TRACE_POINT, "Unknown"));
   190				break;
   191			}
   192			if (i+1 == count)
   193				ACPI_DEBUG_PRINT_RAW((ACPI_DB_TRACE_POINT, "\n"));
   194			else
 > 195				ACPI_DEBUG_PRINT_RAW((ACPI_DB_TRACE_POINT, ", "));
   196		}
   197	}
   198	

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2025-04-17  2:31 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-04-15 19:26 [PATCH] ACPICA: Add support for printing AML arguments when trace point enabled Mario Limonciello
2025-04-17  2:31 ` kernel test robot

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).