From 8a11c59a5aab9423777ee1ead5e66174896c7adb Mon Sep 17 00:00:00 2001 From: Sasha Levin Date: Sun, 24 May 2026 10:36:48 -0400 Subject: Revert "perf python: Add parse_events function" This reverts commit 9cd264079fab9867dbc9fbc8a1e521996e3d7212. Signed-off-by: Sasha Levin --- tools/perf/util/cgroup.c | 2 +- tools/perf/util/evsel.c | 19 +++++-------- tools/perf/util/evsel.h | 2 +- tools/perf/util/python.c | 61 ---------------------------------------- 4 files changed, 9 insertions(+), 75 deletions(-) --- a/tools/perf/util/cgroup.c +++ b/tools/perf/util/cgroup.c @@ -473,7 +473,7 @@ int evlist__expand_cgroup(struct evlist leader = NULL; evlist__for_each_entry(orig_list, pos) { - evsel = evsel__clone(/*dest=*/NULL, pos); + evsel = evsel__clone(pos); if (evsel == NULL) goto out_err; --- a/tools/perf/util/evsel.c +++ b/tools/perf/util/evsel.c @@ -332,7 +332,7 @@ static int evsel__copy_config_terms(stru * The assumption is that @orig is not configured nor opened yet. * So we only care about the attributes that can be set while it's parsed. */ -struct evsel *evsel__clone(struct evsel *dest, struct evsel *orig) +struct evsel *evsel__clone(struct evsel *orig) { struct evsel *evsel; @@ -345,11 +345,7 @@ struct evsel *evsel__clone(struct evsel if (orig->bpf_obj) return NULL; - if (dest) - evsel = dest; - else - evsel = evsel__new(&orig->core.attr); - + evsel = evsel__new(&orig->core.attr); if (evsel == NULL) return NULL; @@ -399,12 +395,11 @@ struct evsel *evsel__clone(struct evsel evsel->core.leader = orig->core.leader; evsel->max_events = orig->max_events; - zfree(&evsel->unit); - if (orig->unit) { - evsel->unit = strdup(orig->unit); - if (evsel->unit == NULL) - goto out_err; - } + free((char *)evsel->unit); + evsel->unit = strdup(orig->unit); + if (evsel->unit == NULL) + goto out_err; + evsel->scale = orig->scale; evsel->snapshot = orig->snapshot; evsel->per_pkg = orig->per_pkg; --- a/tools/perf/util/evsel.h +++ b/tools/perf/util/evsel.h @@ -241,7 +241,7 @@ static inline struct evsel *evsel__new(s return evsel__new_idx(attr, 0); } -struct evsel *evsel__clone(struct evsel *dest, struct evsel *orig); +struct evsel *evsel__clone(struct evsel *orig); int copy_config_terms(struct list_head *dst, struct list_head *src); void free_config_terms(struct list_head *config_terms); --- a/tools/perf/util/python.c +++ b/tools/perf/util/python.c @@ -13,7 +13,6 @@ #include "evsel.h" #include "event.h" #include "print_binary.h" -#include "strbuf.h" #include "thread_map.h" #include "trace-event.h" #include "mmap.h" @@ -1248,60 +1247,6 @@ static PyObject *pyrf__tracepoint(struct #endif // HAVE_LIBTRACEEVENT } -static PyObject *pyrf_evsel__from_evsel(struct evsel *evsel) -{ - struct pyrf_evsel *pevsel = PyObject_New(struct pyrf_evsel, &pyrf_evsel__type); - - if (!pevsel) - return NULL; - - memset(&pevsel->evsel, 0, sizeof(pevsel->evsel)); - evsel__init(&pevsel->evsel, &evsel->core.attr, evsel->core.idx); - - evsel__clone(&pevsel->evsel, evsel); - return (PyObject *)pevsel; -} - -static PyObject *pyrf_evlist__from_evlist(struct evlist *evlist) -{ - struct pyrf_evlist *pevlist = PyObject_New(struct pyrf_evlist, &pyrf_evlist__type); - struct evsel *pos; - - if (!pevlist) - return NULL; - - memset(&pevlist->evlist, 0, sizeof(pevlist->evlist)); - evlist__init(&pevlist->evlist, evlist->core.all_cpus, evlist->core.threads); - evlist__for_each_entry(evlist, pos) { - struct pyrf_evsel *pevsel = (void *)pyrf_evsel__from_evsel(pos); - - evlist__add(&pevlist->evlist, &pevsel->evsel); - } - return (PyObject *)pevlist; -} - -static PyObject *pyrf__parse_events(PyObject *self, PyObject *args) -{ - const char *input; - struct evlist evlist = {}; - struct parse_events_error err; - PyObject *result; - - if (!PyArg_ParseTuple(args, "s", &input)) - return NULL; - - parse_events_error__init(&err); - evlist__init(&evlist, NULL, NULL); - if (parse_events(&evlist, input, &err)) { - parse_events_error__print(&err, input); - PyErr_SetFromErrno(PyExc_OSError); - return NULL; - } - result = pyrf_evlist__from_evlist(&evlist); - evlist__exit(&evlist); - return result; -} - static PyMethodDef perf__methods[] = { { .ml_name = "tracepoint", @@ -1309,12 +1254,6 @@ static PyMethodDef perf__methods[] = { .ml_flags = METH_VARARGS | METH_KEYWORDS, .ml_doc = PyDoc_STR("Get tracepoint config.") }, - { - .ml_name = "parse_events", - .ml_meth = (PyCFunction) pyrf__parse_events, - .ml_flags = METH_VARARGS, - .ml_doc = PyDoc_STR("Parse a string of events and return an evlist.") - }, { .ml_name = NULL, } };