]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
perf evsel: tp_format accessing improvements
authorIan Rogers <irogers@google.com>
Fri, 28 Feb 2025 22:23:00 +0000 (14:23 -0800)
committerNamhyung Kim <namhyung@kernel.org>
Wed, 12 Mar 2025 01:55:37 +0000 (18:55 -0700)
Ensure evsel__clone copies the tp_sys and tp_name variables.
In evsel__tp_format, if tp_sys isn't set, use the config value to find
the tp_format. This succeeds in python code where pyrf__tracepoint has
already found the format.

Reviewed-by: Howard Chu <howardchu95@gmail.com>
Signed-off-by: Ian Rogers <irogers@google.com>
Reviewed-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Link: https://lore.kernel.org/r/20250228222308.626803-4-irogers@google.com
Fixes: 6c8310e8380d472c ("perf evsel: Allow evsel__newtp without libtraceevent")
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
tools/perf/util/evsel.c

index 4a0ef095db928da2ad6498b095c81dec143c639a..1974395492d7da5e2a1192f1aee128805c1b1ed8 100644 (file)
@@ -521,6 +521,16 @@ struct evsel *evsel__clone(struct evsel *dest, struct evsel *orig)
        }
        evsel->cgrp = cgroup__get(orig->cgrp);
 #ifdef HAVE_LIBTRACEEVENT
+       if (orig->tp_sys) {
+               evsel->tp_sys = strdup(orig->tp_sys);
+               if (evsel->tp_sys == NULL)
+                       goto out_err;
+       }
+       if (orig->tp_name) {
+               evsel->tp_name = strdup(orig->tp_name);
+               if (evsel->tp_name == NULL)
+                       goto out_err;
+       }
        evsel->tp_format = orig->tp_format;
 #endif
        evsel->handler = orig->handler;
@@ -644,7 +654,11 @@ struct tep_event *evsel__tp_format(struct evsel *evsel)
        if (evsel->core.attr.type != PERF_TYPE_TRACEPOINT)
                return NULL;
 
-       tp_format = trace_event__tp_format(evsel->tp_sys, evsel->tp_name);
+       if (!evsel->tp_sys)
+               tp_format = trace_event__tp_format_id(evsel->core.attr.config);
+       else
+               tp_format = trace_event__tp_format(evsel->tp_sys, evsel->tp_name);
+
        if (IS_ERR(tp_format)) {
                int err = -PTR_ERR(evsel->tp_format);