Messages in this thread | | | Date | Thu, 1 Sep 2016 08:42:14 +0900 | From | Masami Hiramatsu <> | Subject | Re: [PATCH 1/1] perf probe: Do not use map_load filters for function |
| |
On Wed, 31 Aug 2016 10:04:27 -0300 Arnaldo Carvalho de Melo <acme@kernel.org> wrote:
> From: Arnaldo Carvalho de Melo <acme@redhat.com> > > It is simpler to just do the loop, no need for globals and the last user > of such facility disappears. > > Testing: > > # perf probe -F [a-z]*recvmsg > aead_recvmsg > compat_SyS_recvmsg > compat_sys_recvmsg > hash_recvmsg > inet_recvmsg > kernel_recvmsg > netlink_recvmsg > packet_recvmsg > ping_recvmsg > raw_recvmsg > rawv6_recvmsg > rng_recvmsg > security_socket_recvmsg > selinux_socket_recvmsg > skcipher_recvmsg > sock_common_recvmsg > sock_no_recvmsg > sock_recvmsg > sys_recvmsg > tcp_recvmsg > udp_recvmsg > udpv6_recvmsg > unix_dgram_recvmsg > unix_seqpacket_recvmsg > unix_stream_recvmsg > # > > Without filters: > > # perf probe -F | tail -5 > zswap_pool_create > zswap_pool_current > zswap_update_total_size > zswap_writeback_entry > zswap_zpool_param_set > # > # perf probe -F | wc -l > 33311 > #
Looks good to me!
Acked-by: Masami Hiramatsu <mhiramat@kernel.org>
Thanks!
> > Cc: Adrian Hunter <adrian.hunter@intel.com> > Cc: David Ahern <dsahern@gmail.com> > Cc: Jiri Olsa <jolsa@kernel.org> > Cc: Masami Hiramatsu <mhiramat@kernel.org> > Cc: Namhyung Kim <namhyung@kernel.org> > Cc: Wang Nan <wangnan0@huawei.com> > Link: http://lkml.kernel.org/n/tip-tc6y64i698cddufwe5ppn2k3@git.kernel.org > Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> > --- > tools/perf/util/probe-event.c | 29 ++++++++++------------------- > 1 file changed, 10 insertions(+), 19 deletions(-) > > diff --git a/tools/perf/util/probe-event.c b/tools/perf/util/probe-event.c > index 28733962cd80..0bed2ee16292 100644 > --- a/tools/perf/util/probe-event.c > +++ b/tools/perf/util/probe-event.c > @@ -3289,24 +3289,10 @@ out: > return ret; > } > > -/* TODO: don't use a global variable for filter ... */ > -static struct strfilter *available_func_filter; > - > -/* > - * If a symbol corresponds to a function with global binding and > - * matches filter return 0. For all others return 1. > - */ > -static int filter_available_functions(struct map *map __maybe_unused, > - struct symbol *sym) > -{ > - if (strfilter__compare(available_func_filter, sym->name)) > - return 0; > - return 1; > -} > - > int show_available_funcs(const char *target, struct strfilter *_filter, > bool user) > { > + struct rb_node *nd; > struct map *map; > int ret; > > @@ -3324,9 +3310,7 @@ int show_available_funcs(const char *target, struct strfilter *_filter, > return -EINVAL; > } > > - /* Load symbols with given filter */ > - available_func_filter = _filter; > - ret = map__load(map, filter_available_functions); > + ret = map__load(map, NULL); > if (ret) { > if (ret == -2) { > char *str = strfilter__string(_filter); > @@ -3343,7 +3327,14 @@ int show_available_funcs(const char *target, struct strfilter *_filter, > > /* Show all (filtered) symbols */ > setup_pager(); > - dso__fprintf_symbols_by_name(map->dso, map->type, stdout); > + > + for (nd = rb_first(&map->dso->symbol_names[map->type]); nd; nd = rb_next(nd)) { > + struct symbol_name_rb_node *pos = rb_entry(nd, struct symbol_name_rb_node, rb_node); > + > + if (strfilter__compare(_filter, pos->sym.name)) > + printf("%s\n", pos->sym.name); > + } > + > end: > if (user) { > map__put(map); > -- > 2.7.4 >
-- Masami Hiramatsu <mhiramat@kernel.org>
| |