Messages in this thread | | | From | Ian Rogers <> | Date | Wed, 24 Aug 2022 08:41:27 -0700 | Subject | Re: [PATCH 2/5] perf record: Fix done_fd wakeup event |
| |
On Wed, Aug 24, 2022 at 12:28 AM Adrian Hunter <adrian.hunter@intel.com> wrote: > > evlist__add_wakeup_eventfd() calls perf_evlist__add_pollfd() to add a > non-perf-event to the evlist pollfds. Since commit 415ccb58f68a > ("perf record: Introduce thread specific data array") that doesn't work > because evlist pollfs is not polled and done_fd is not duplicated into > thread-data. > > Patch "perf record: Fix way of handling non-perf-event pollfds" added a new > approach that ensures file descriptors like done_fd are handled correctly > by flagging them as fdarray_flag__non_perf_event. > > Fix by flagging done_fd as fdarray_flag__non_perf_event. > > Example: > > Before: > > $ sleep 3 & perf record -vv -p $! > ... > thread_data[0x55f44bd34140]: pollfd[0] <- event_fd=5 > thread_data[0x55f44bd34140]: pollfd[1] <- event_fd=6 > thread_data[0x55f44bd34140]: pollfd[2] <- event_fd=7 > thread_data[0x55f44bd34140]: pollfd[3] <- event_fd=8 > thread_data[0x55f44bd34140]: pollfd[4] <- event_fd=9 > thread_data[0x55f44bd34140]: pollfd[5] <- event_fd=10 > thread_data[0x55f44bd34140]: pollfd[6] <- event_fd=11 > thread_data[0x55f44bd34140]: pollfd[7] <- event_fd=12 > ... > > After: > > $ sleep 3 & perf record -vv -p $! > ... > thread_data[0x55a8ded89140]: pollfd[0] <- event_fd=5 > thread_data[0x55a8ded89140]: pollfd[1] <- event_fd=6 > thread_data[0x55a8ded89140]: pollfd[2] <- event_fd=7 > thread_data[0x55a8ded89140]: pollfd[3] <- event_fd=8 > thread_data[0x55a8ded89140]: pollfd[4] <- event_fd=9 > thread_data[0x55a8ded89140]: pollfd[5] <- event_fd=10 > thread_data[0x55a8ded89140]: pollfd[6] <- event_fd=11 > thread_data[0x55a8ded89140]: pollfd[7] <- event_fd=12 > thread_data[0x55a8ded89140]: pollfd[8] <- non_perf_event fd=4 > ... > > This patch depends on "perf record: Fix way of handling non-perf-event > pollfds". > > Fixes: 415ccb58f68a ("perf record: Introduce thread specific data array") > Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Acked-by: Ian Rogers <irogers@google.com>
Thanks, Ian
> --- > tools/perf/util/evlist.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c > index 48167f3941a6..0b2222d05577 100644 > --- a/tools/perf/util/evlist.c > +++ b/tools/perf/util/evlist.c > @@ -608,7 +608,8 @@ int evlist__filter_pollfd(struct evlist *evlist, short revents_and_mask) > int evlist__add_wakeup_eventfd(struct evlist *evlist, int fd) > { > return perf_evlist__add_pollfd(&evlist->core, fd, NULL, POLLIN, > - fdarray_flag__nonfilterable); > + fdarray_flag__nonfilterable | > + fdarray_flag__non_perf_event); > } > #endif > > -- > 2.25.1 >
| |