From: Donglin Peng Date: Mon, 9 Feb 2026 07:19:49 +0000 (+0800) Subject: tracing: Pretty-print enum parameters in function arguments X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=6b0c7c28f7d1f5bd327981a8b733ca3938fae872;p=thirdparty%2Fkernel%2Flinux.git tracing: Pretty-print enum parameters in function arguments Currently, print_function_args() prints enum parameter values in decimal format, reducing trace log readability. Use BTF information to resolve enum parameters and print their symbolic names (where available). This improves readability by showing meaningful identifiers instead of raw numbers. Before: mod_memcg_lruvec_state(lruvec=0xffff..., idx=5, val=320) After: mod_memcg_lruvec_state(lruvec=0xffff..., idx=5 [NR_SLAB_RECLAIMABLE_B], val=320) Cc: Steven Rostedt Cc: Masami Hiramatsu Link: https://patch.msgid.link/20260209071949.4040193-1-dolinux.peng@gmail.com Signed-off-by: Donglin Peng Signed-off-by: Steven Rostedt (Google) --- diff --git a/kernel/trace/trace_output.c b/kernel/trace/trace_output.c index 1996d7aba0383..be0755400f9b6 100644 --- a/kernel/trace/trace_output.c +++ b/kernel/trace/trace_output.c @@ -719,12 +719,13 @@ void print_function_args(struct trace_seq *s, unsigned long *args, { const struct btf_param *param; const struct btf_type *t; + const struct btf_enum *enums; const char *param_name; char name[KSYM_NAME_LEN]; unsigned long arg; struct btf *btf; s32 tid, nr = 0; - int a, p, x; + int a, p, x, i; u16 encode; trace_seq_printf(s, "("); @@ -778,6 +779,15 @@ void print_function_args(struct trace_seq *s, unsigned long *args, break; case BTF_KIND_ENUM: trace_seq_printf(s, "%ld", arg); + enums = btf_enum(t); + for (i = 0; i < btf_vlen(t); i++) { + if (arg == enums[i].val) { + trace_seq_printf(s, " [%s]", + btf_name_by_offset(btf, + enums[i].name_off)); + break; + } + } break; default: /* This does not handle complex arguments */