From: Shunsuke Nakamura <nakamura.shun@xxxxxxxxxxx> Add the following functions: perf_evsel__has_fd to check for perf events with the file descriptor specified in the argument. This function can be used in signal handlers to check overflow. Signed-off-by: Shunsuke Nakamura <nakamura.shun@xxxxxxxxxxx> Signed-off-by: Charlie Jenkins <charlie@xxxxxxxxxxxx> --- tools/lib/perf/Documentation/libperf.txt | 1 + tools/lib/perf/evsel.c | 18 ++++++++++++++++++ tools/lib/perf/include/perf/evsel.h | 1 + tools/lib/perf/libperf.map | 1 + 4 files changed, 21 insertions(+) diff --git a/tools/lib/perf/Documentation/libperf.txt b/tools/lib/perf/Documentation/libperf.txt index bb99534d5855..f1bfe6b6e78a 100644 --- a/tools/lib/perf/Documentation/libperf.txt +++ b/tools/lib/perf/Documentation/libperf.txt @@ -161,6 +161,7 @@ SYNOPSIS int perf_evsel__enable_cpu(struct perf_evsel *evsel, int cpu_map_idx); int perf_evsel__disable(struct perf_evsel *evsel); int perf_evsel__disable_cpu(struct perf_evsel *evsel, int cpu_map_idx); + bool perf_evsel__has_fd(struct perf_evsel *evsel, int fd); struct perf_cpu_map *perf_evsel__cpus(struct perf_evsel *evsel); struct perf_thread_map *perf_evsel__threads(struct perf_evsel *evsel); struct perf_event_attr *perf_evsel__attr(struct perf_evsel *evsel); diff --git a/tools/lib/perf/evsel.c b/tools/lib/perf/evsel.c index 17d3d9a88c23..6b98cba6eb4f 100644 --- a/tools/lib/perf/evsel.c +++ b/tools/lib/perf/evsel.c @@ -658,3 +658,21 @@ int perf_evsel__open_opts(struct perf_evsel *evsel, struct perf_cpu_map *cpus, return err; } + +bool perf_evsel__has_fd(struct perf_evsel *evsel, int fd) +{ + int cpu_map_idx; + int thread; + int *evsel_fd; + + for (cpu_map_idx = 0; cpu_map_idx < xyarray__max_x(evsel->fd); ++cpu_map_idx) { + for (thread = 0; thread < xyarray__max_y(evsel->fd); ++thread) { + evsel_fd = FD(evsel, cpu_map_idx, thread); + + if (fd == *evsel_fd) + return true; + } + } + + return false; +} diff --git a/tools/lib/perf/include/perf/evsel.h b/tools/lib/perf/include/perf/evsel.h index 344808f23371..77816a35c383 100644 --- a/tools/lib/perf/include/perf/evsel.h +++ b/tools/lib/perf/include/perf/evsel.h @@ -73,5 +73,6 @@ LIBPERF_API int perf_evsel__open_opts(struct perf_evsel *evsel, struct perf_cpu_map *cpus, struct perf_thread_map *threads, struct perf_evsel_open_opts *opts); +LIBPERF_API bool perf_evsel__has_fd(struct perf_evsel *evsel, int fd); #endif /* __LIBPERF_EVSEL_H */ diff --git a/tools/lib/perf/libperf.map b/tools/lib/perf/libperf.map index 84fed76621cb..f68519e17885 100644 --- a/tools/lib/perf/libperf.map +++ b/tools/lib/perf/libperf.map @@ -38,6 +38,7 @@ LIBPERF_0.0.1 { perf_evsel__cpus; perf_evsel__threads; perf_evsel__attr; + perf_evsel__has_fd; perf_evlist__new; perf_evlist__delete; perf_evlist__open; -- 2.44.0