On Thu, 2026-11-05 at 09:12 -0500, Steven Rostedt wrote:
> Could you also add code in the samples/trace_events directory. Perhaps add
> a new event?
>
> This will make it easier to understand exactly how to add new __print_sym()s.
I guess so. I was kinda hoping to simply convert all the others - it
clearly has advantages this way.
Any objection to simply converting the __print_symbolic() sample? It
would look something like this:
--- a/samples/trace_events/trace-events-sample.h
+++ b/samples/trace_events/trace-events-sample.h
@@ -297,6 +297,28 @@ TRACE_DEFINE_ENUM(TRACE_SAMPLE_FOO);
TRACE_DEFINE_ENUM(TRACE_SAMPLE_BAR);
TRACE_DEFINE_ENUM(TRACE_SAMPLE_ZOO);
+/* define the names as { value, "name" } tuples for __print_sym() below */
+TRACE_DEFINE_SYM_LIST(sample_names,
+ { 0, "zero" },
+ { TRACE_SAMPLE_FOO, "TWO" },
+ { TRACE_SAMPLE_BAR, "FOUR" },
+ { TRACE_SAMPLE_ZOO, "EIGHT" },
+ { 10, "TEN" }
+);
+
+/*
+ * Alternatively, you could define a function for the names:
+ *
+ * The _lookup() function returns the string for the given value.
+ *
+ * The _show() function must
+ * seq_printf(m, ", { %u, \"%s\" }", value, name);
+ * for each value that userspace should be able to parse.
+ */
+const char *sample_names2_lookup(unsigned long long value);
+void sample_names2_show(struct seq_file *m);
+TRACE_DEFINE_SYM_FNS(sample_names2, sample_names2_lookup, sample_names2_show);
+
TRACE_EVENT(foo_bar,
TP_PROTO(const char *foo, int bar, const int *lst,
@@ -340,14 +362,10 @@ TRACE_EVENT(foo_bar,
* the variable matches one of the values, then it will print the
* string in that pair. If non are matched, it returns a string
* version of the number (if __entry->bar == 7 then "7" is returned).
+ *
+ * See above for the declaration of "sample_names".
*/
- __print_symbolic(__entry->bar,
- { 0, "zero" },
- { TRACE_SAMPLE_FOO, "TWO" },
- { TRACE_SAMPLE_BAR, "FOUR" },
- { TRACE_SAMPLE_ZOO, "EIGHT" },
- { 10, "TEN" }
- ),
+ __print_sym(__entry->bar, sample_names),
/*
* __print_flags( variable, "delim", { value, "flag" }, ... ),
It did show a bug because TRACE_SYSTEM isn't a C var in that file (and
perhaps only in that file?), so I'll have to resend with that fixed
anyway.
> FYI, this series did pass all my tests.
Cool. Sorry the earlier (long time ago) version had the __init_data
issue, I'd mostly tested on UML and that wasn't protected there.
johannes
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev