perf probe: Accept filter argument for --funcs
authorMasami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
Tue, 5 May 2015 02:29:50 +0000 (11:29 +0900)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Tue, 5 May 2015 21:13:04 +0000 (18:13 -0300)
This allows the user to pass the filter pattern directly to the --funcs
option as below:

  ----
  # ./perf probe -F *kmalloc
  __kmalloc
  devm_kmalloc
  mempool_kmalloc
  sg_kmalloc
  sock_kmalloc
  ----

We previously needed to use the --filter option for that.

Signed-off-by: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Link: http://lkml.kernel.org/r/20150505022950.23399.22435.stgit@localhost.localdomain
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/Documentation/perf-probe.txt
tools/perf/builtin-probe.c

index d0feb8e6eeef43b87578a3ead0e36639b890e559..a272f2e9a1cf12ed26f843c0248646711b738da1 100644 (file)
@@ -84,9 +84,10 @@ OPTIONS
        variables.
 
 -F::
---funcs::
+--funcs[=FILTER]::
        Show available functions in given module or kernel. With -x/--exec,
        can also list functions in a user space executable / shared library.
+       This also can accept a FILTER rule argument.
 
 --filter=FILTER::
        (Only for --vars and --funcs) Set filter. FILTER is a combination of glob
index 1f41b4eb0c5ab04d92019135bc82163836c4f4f0..5a0e8f1b2c36ead253bca5d23030c438a3584dde 100644 (file)
@@ -290,6 +290,17 @@ static int opt_show_vars(const struct option *opt __maybe_unused,
        return ret;
 }
 #endif
+static int opt_show_funcs(const struct option *opt __maybe_unused,
+                         const char *str, int unset)
+{
+       if (!unset)
+               params.show_funcs = true;
+
+       if (str)
+               return params_add_filter(str);
+
+       return 0;
+}
 
 static int opt_set_filter(const struct option *opt __maybe_unused,
                          const char *str, int unset __maybe_unused)
@@ -399,8 +410,9 @@ __cmd_probe(int argc, const char **argv, const char *prefix __maybe_unused)
        OPT__DRY_RUN(&probe_event_dry_run),
        OPT_INTEGER('\0', "max-probes", &params.max_probe_points,
                 "Set how many probe points can be found for a probe."),
-       OPT_BOOLEAN('F', "funcs", &params.show_funcs,
-                   "Show potential probe-able functions."),
+       OPT_CALLBACK_DEFAULT('F', "funcs", NULL, "[FILTER]",
+                            "Show potential probe-able functions.",
+                            opt_show_funcs, DEFAULT_FUNC_FILTER),
        OPT_CALLBACK('\0', "filter", NULL,
                     "[!]FILTER", "Set a filter (with --vars/funcs only)\n"
                     "\t\t\t(default: \"" DEFAULT_VAR_FILTER "\" for --vars,\n"
@@ -472,9 +484,6 @@ __cmd_probe(int argc, const char **argv, const char *prefix __maybe_unused)
                return ret;
        }
        if (params.show_funcs) {
-               if (!params.filter)
-                       params.filter = strfilter__new(DEFAULT_FUNC_FILTER,
-                                                      NULL);
                ret = show_available_funcs(params.target, params.filter,
                                        params.uprobes);
                strfilter__delete(params.filter);