Re: [PATCH v4 03/10] perf parse-events: Add parse_uid_filter helper
From: Namhyung Kim
Date: Fri Jun 06 2025 - 16:01:31 EST
On Fri, Jun 06, 2025 at 11:13:10AM -0700, Ian Rogers wrote:
> On Fri, Jun 6, 2025 at 10:41 AM Namhyung Kim <namhyung@xxxxxxxxxx> wrote:
> >
> > Hi Ian,
> >
> > On Wed, Jun 04, 2025 at 10:45:37AM -0700, Ian Rogers wrote:
> > > Add parse_uid_filter filter as a helper to parse_filter, that
> > > constructs a uid filter string. As uid filters don't work with
> > > tracepoint filters, add a is_possible_tp_filter function so the
> > > tracepoint filter isn't attempted for tracepoint evsels.
> > >
> > > Signed-off-by: Ian Rogers <irogers@xxxxxxxxxx>
> > > ---
> > > tools/perf/util/parse-events.c | 33 ++++++++++++++++++++++++++++++++-
> > > tools/perf/util/parse-events.h | 1 +
> > > 2 files changed, 33 insertions(+), 1 deletion(-)
> > >
> > > diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c
> > > index d96adf23dc94..7f34e602fc08 100644
> > > --- a/tools/perf/util/parse-events.c
> > > +++ b/tools/perf/util/parse-events.c
> > > @@ -25,6 +25,7 @@
> > > #include "pmu.h"
> > > #include "pmus.h"
> > > #include "asm/bug.h"
> > > +#include "ui/ui.h"
> > > #include "util/parse-branch-options.h"
> > > #include "util/evsel_config.h"
> > > #include "util/event.h"
> > > @@ -2561,6 +2562,12 @@ foreach_evsel_in_last_glob(struct evlist *evlist,
> > > return 0;
> > > }
> > >
> > > +/* Will a tracepoint filter work for str or should a BPF filter be used? */
> > > +static bool is_possible_tp_filter(const char *str)
> > > +{
> > > + return strstr(str, "uid") == NULL;
> > > +}
> > > +
> > > static int set_filter(struct evsel *evsel, const void *arg)
> > > {
> > > const char *str = arg;
> > > @@ -2573,7 +2580,7 @@ static int set_filter(struct evsel *evsel, const void *arg)
> > > return -1;
> > > }
> > >
> > > - if (evsel->core.attr.type == PERF_TYPE_TRACEPOINT) {
> > > + if (evsel->core.attr.type == PERF_TYPE_TRACEPOINT && is_possible_tp_filter(str)) {
> > > if (evsel__append_tp_filter(evsel, str) < 0) {
> > > fprintf(stderr,
> > > "not enough memory to hold filter string\n");
> > > @@ -2609,6 +2616,30 @@ int parse_filter(const struct option *opt, const char *str,
> > > (const void *)str);
> > > }
> > >
> > > +int parse_uid_filter(struct evlist *evlist, uid_t uid)
> >
> > It failed to build on alpine 3.18.
> >
> > util/parse-events.h:48:45: error: unknown type name 'uid_t'
> > 48 | int parse_uid_filter(struct evlist *evlist, uid_t uid);
> > | ^~~~~
> >
> > I'll add this.
>
> Thanks Namhyung! I see this in tmp.perf-tools-next so I'll assume
> there's no need for a v5.
Right, I've updated the branch with the fix.
Thanks,
Namhyung