Message ID | 20250417031040.514460-1-superm1@kernel.org |
---|---|
State | New |
Headers | show |
Series | [v2] ACPICA: Add support for printing AML arguments when trace point enabled | expand |
On Thu, Apr 17, 2025 at 3:51 PM Rafael J. Wysocki <rafael@kernel.org> wrote: > > On Thu, Apr 17, 2025 at 2:59 PM Mario Limonciello <superm1@kernel.org> wrote: > > > > On 4/17/2025 7:46 AM, Rafael J. Wysocki wrote: > > > On Thu, Apr 17, 2025 at 2:03 PM Mario Limonciello <superm1@kernel.org> wrote: > > >> > > >> > > >> > > >> On 4/17/25 06:19, Rafael J. Wysocki wrote: > > >>> On Thu, Apr 17, 2025 at 5:10 AM Mario Limonciello <superm1@kernel.org> wrote: > > >>>> > > >>>> 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 > > >>> > > >>> The link doesn't work. > > >> > > >> Are you sure? > > >> > > >> I just tried again and it worked for me. > > > > > > Yeah, it works now, I had to sign in to github. > > > > > > But it is a link to a commit and I need a link to a PR. I think it's this one: > > > > > > https://github.com/acpica/acpica/pull/1012 > > > > Yes that's the right PR that led to the commit. Can you swap it out? > > Yes, I can. > > > Or would you like me to resubmit with it adjusted? > > No need. Applied as 6.16 material, thanks!
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..e4721504c390d 100644 --- a/drivers/acpi/acpica/extrace.c +++ b/drivers/acpi/acpica/extrace.c @@ -147,6 +147,57 @@ 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