Re: [PATCH RESEND] libtraceevent: Pretty print function parameters of enum-type
Steven Rostedt <[email protected]> Fri, 6 Feb 2026 10:02:11 -0500
| Newsgroups | org.kernel.vger.linux-trace-devel |
|---|---|
| Message-ID | <[email protected]> |
On Fri, 6 Feb 2026 17:15:12 +0800 Donglin Peng <[email protected]> wrote: > From: Donglin Peng <[email protected]> Hi Donglin, > > The tep_btf_print_args() function currently prints values of > enum parameters in decimal format, which reduces readability. > > Utilize the BTF information to resolve enum type parameters > and print their symbolic names where possible. This enhances > the trace log readability by displaying meaningful identifiers > instead of raw numbers. > > Before: > mod_memcg_lruvec_state(lruvec=0xffff88800c18a540, idx=5, val=320) > > After: > mod_memcg_lruvec_state(lruvec=0xffff88800c18a540, idx=5 [NR_SLAB_RECLAIMABLE_B], val=320) > > Cc: Steven Rostedt <[email protected]> > Cc: Masami Hiramatsu <[email protected]> > Signed-off-by: Donglin Peng <[email protected]> > --- > src/trace-btf.c | 20 +++++++++++++++++++- > 1 file changed, 19 insertions(+), 1 deletion(-) > > diff --git a/src/trace-btf.c b/src/trace-btf.c > index 859b0860ce2a..85f5fefb4d3b 100644 > --- a/src/trace-btf.c > +++ b/src/trace-btf.c > @@ -32,6 +32,16 @@ struct tep_btf { > #define REALLOC_SIZE (1 << 10) > #define REALLOC_MASK (REALLOC_SIZE - 1) > > +#define for_each_enum(i, enum_type, member) \ > + for (i = 0, member = btf_enum(enum_type); \ > + i < BTF_INFO_VLEN(enum_type->info); \ > + i++, member++) You can make the above into: #define for_each_enum(enum_type, member) \ for (int __i = 0, member = btf_enum(enum_type); \ __i < BTF_INFO_VLEN((enum_type)->info); \ __i++, member++) Then you don't need to pass in the counter "i". (also it's good to put parenthesis around "enum_type"). > + > +static inline struct btf_enum *btf_enum(const struct btf_type *t) > +{ > + return (struct btf_enum *)(t + 1); > +} > + > static const char *btf_name(struct tep_btf *btf, int off) > { > if (off < btf->hdr->str_len) > @@ -546,10 +556,11 @@ int tep_btf_print_args(struct tep_handle *tep, struct trace_seq *s, void *args, > struct tep_btf *btf = tep->btf; > struct btf_type *type = tep_btf_find_func(btf, func); > struct btf_param *param; > + struct btf_enum *enump; > unsigned long long arg; > unsigned int encode; > const char *param_name; > - int a, p, x, nr; > + int a, p, x, nr, i; And the above doesn't need to be changed. Thanks, -- Steve > > if (!func) > return -1; > @@ -628,6 +639,13 @@ int tep_btf_print_args(struct tep_handle *tep, struct trace_seq *s, void *args, > break; > case BTF_KIND_ENUM: > trace_seq_printf(s, "%lld", arg); > + for_each_enum(i, t, enump) { > + if (arg == enump->val) { > + trace_seq_printf(s, " [%s]", > + btf_name(btf, enump->name_off)); > + break; > + } > + } > break; > default: > /* This does not handle complex arguments */