tools: Pass arg to fdarray__filter's call back function
Before this patch there's no way to pass arguments to fdarray__filter's call back function. This improvement will be used by 'perf record' to support unmapping ring buffer for both main evlist and overwrite evlist. Without this patch there's no way to track overwrite evlist from 'struct fdarray'. Signed-off-by: Wang Nan <wangnan0@huawei.com> Cc: He Kuang <hekuang@huawei.com> Cc: Jiri Olsa <jolsa@kernel.org> Cc: Masami Hiramatsu <mhiramat@kernel.org> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Zefan Li <lizefan@huawei.com> Cc: pi3orama@163.com Link: http://lkml.kernel.org/r/1464183898-174512-10-git-send-email-wangnan0@huawei.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:

committed by
Arnaldo Carvalho de Melo

parent
5a5ddeb6e3
commit
258e4bfcbd
@@ -36,7 +36,7 @@ int test__fdarray__filter(int subtest __maybe_unused)
|
||||
}
|
||||
|
||||
fdarray__init_revents(fda, POLLIN);
|
||||
nr_fds = fdarray__filter(fda, POLLHUP, NULL);
|
||||
nr_fds = fdarray__filter(fda, POLLHUP, NULL, NULL);
|
||||
if (nr_fds != fda->nr_alloc) {
|
||||
pr_debug("\nfdarray__filter()=%d != %d shouldn't have filtered anything",
|
||||
nr_fds, fda->nr_alloc);
|
||||
@@ -44,7 +44,7 @@ int test__fdarray__filter(int subtest __maybe_unused)
|
||||
}
|
||||
|
||||
fdarray__init_revents(fda, POLLHUP);
|
||||
nr_fds = fdarray__filter(fda, POLLHUP, NULL);
|
||||
nr_fds = fdarray__filter(fda, POLLHUP, NULL, NULL);
|
||||
if (nr_fds != 0) {
|
||||
pr_debug("\nfdarray__filter()=%d != %d, should have filtered all fds",
|
||||
nr_fds, fda->nr_alloc);
|
||||
@@ -57,7 +57,7 @@ int test__fdarray__filter(int subtest __maybe_unused)
|
||||
|
||||
pr_debug("\nfiltering all but fda->entries[2]:");
|
||||
fdarray__fprintf_prefix(fda, "before", stderr);
|
||||
nr_fds = fdarray__filter(fda, POLLHUP, NULL);
|
||||
nr_fds = fdarray__filter(fda, POLLHUP, NULL, NULL);
|
||||
fdarray__fprintf_prefix(fda, " after", stderr);
|
||||
if (nr_fds != 1) {
|
||||
pr_debug("\nfdarray__filter()=%d != 1, should have left just one event", nr_fds);
|
||||
@@ -78,7 +78,7 @@ int test__fdarray__filter(int subtest __maybe_unused)
|
||||
|
||||
pr_debug("\nfiltering all but (fda->entries[0], fda->entries[3]):");
|
||||
fdarray__fprintf_prefix(fda, "before", stderr);
|
||||
nr_fds = fdarray__filter(fda, POLLHUP, NULL);
|
||||
nr_fds = fdarray__filter(fda, POLLHUP, NULL, NULL);
|
||||
fdarray__fprintf_prefix(fda, " after", stderr);
|
||||
if (nr_fds != 2) {
|
||||
pr_debug("\nfdarray__filter()=%d != 2, should have left just two events",
|
||||
|
@@ -483,7 +483,8 @@ int perf_evlist__add_pollfd(struct perf_evlist *evlist, int fd)
|
||||
return __perf_evlist__add_pollfd(evlist, fd, -1, POLLIN);
|
||||
}
|
||||
|
||||
static void perf_evlist__munmap_filtered(struct fdarray *fda, int fd)
|
||||
static void perf_evlist__munmap_filtered(struct fdarray *fda, int fd,
|
||||
void *arg __maybe_unused)
|
||||
{
|
||||
struct perf_evlist *evlist = container_of(fda, struct perf_evlist, pollfd);
|
||||
|
||||
@@ -493,7 +494,7 @@ static void perf_evlist__munmap_filtered(struct fdarray *fda, int fd)
|
||||
int perf_evlist__filter_pollfd(struct perf_evlist *evlist, short revents_and_mask)
|
||||
{
|
||||
return fdarray__filter(&evlist->pollfd, revents_and_mask,
|
||||
perf_evlist__munmap_filtered);
|
||||
perf_evlist__munmap_filtered, NULL);
|
||||
}
|
||||
|
||||
int perf_evlist__poll(struct perf_evlist *evlist, int timeout)
|
||||
|
Reference in New Issue
Block a user