This patch suppress message output by add_perf_probe_events() and del_perf_probe_events() if they are triggered by BPF loading. Before this patch, when using 'perf record' with BPF object/source as event selector, following message will be output:
Added new event: perf_bpf_probe:lock_page_ret (on __lock_page%return) You can now use it in all perf tools, such as: perf record -e perf_bpf_probe:lock_page_ret -aR sleep 1 ... Removed event: perf_bpf_probe:lock_page_ret Which is misleading, especially 'use it in all perf tools' because they will be removed after 'pref record' exit. In this patch, a 'silent' field is appended into probe_conf to control output. bpf__{,un}probe() set it to true when calling {add,del}_perf_probe_events(). Signed-off-by: Wang Nan <wangn...@huawei.com> --- tools/perf/util/bpf-loader.c | 6 ++++++ tools/perf/util/probe-event.c | 22 ++++++++++++++++------ tools/perf/util/probe-event.h | 1 + 3 files changed, 23 insertions(+), 6 deletions(-) diff --git a/tools/perf/util/bpf-loader.c b/tools/perf/util/bpf-loader.c index 63077b9..4aa372b 100644 --- a/tools/perf/util/bpf-loader.c +++ b/tools/perf/util/bpf-loader.c @@ -199,6 +199,7 @@ static bool is_probing; int bpf__unprobe(void) { struct strfilter *delfilter; + bool old_silent = probe_conf.silent; int ret; if (!is_probing) @@ -210,7 +211,9 @@ int bpf__unprobe(void) return -ENOMEM; } + probe_conf.silent = true; ret = del_perf_probe_events(delfilter); + probe_conf.silent = old_silent; strfilter__delete(delfilter); if (ret < 0 && is_probing) pr_err("Error: failed to delete events: %s\n", @@ -223,15 +226,18 @@ int bpf__unprobe(void) int bpf__probe(void) { int err; + bool old_silent = probe_conf.silent; if (nr_probe_events <= 0) return 0; + probe_conf.silent = true; probe_conf.max_probes = MAX_PROBES; /* Let add_perf_probe_events keeps probe_trace_event */ err = add_perf_probe_events(probe_event_array, nr_probe_events, false); + probe_conf.silent = old_silent; /* add_perf_probe_events return negative when fail */ if (err < 0) diff --git a/tools/perf/util/probe-event.c b/tools/perf/util/probe-event.c index 083e8b4..b9573c5 100644 --- a/tools/perf/util/probe-event.c +++ b/tools/perf/util/probe-event.c @@ -51,7 +51,9 @@ #define PERFPROBE_GROUP "probe" bool probe_event_dry_run; /* Dry run flag */ -struct probe_conf probe_conf; +struct probe_conf probe_conf = { + .silent = false, +}; #define semantic_error(msg ...) pr_err("Semantic error :" msg) @@ -2250,10 +2252,12 @@ static int show_perf_probe_event(const char *group, const char *event, ret = perf_probe_event__sprintf(group, event, pev, module, &buf); if (ret >= 0) { - if (use_stdout) + if (use_stdout && !probe_conf.silent) printf("%s\n", buf.buf); - else + else if (!probe_conf.silent) pr_info("%s\n", buf.buf); + else + pr_debug("%s\n", buf.buf); } strbuf_release(&buf); @@ -2512,7 +2516,10 @@ static int __add_probe_trace_events(struct perf_probe_event *pev, safename = (pev->point.function && !strisglob(pev->point.function)); ret = 0; - pr_info("Added new event%s\n", (ntevs > 1) ? "s:" : ":"); + if (!probe_conf.silent) + pr_info("Added new event%s\n", (ntevs > 1) ? "s:" : ":"); + else + pr_debug("Added new event%s\n", (ntevs > 1) ? "s:" : ":"); for (i = 0; i < ntevs; i++) { tev = &tevs[i]; /* Skip if the symbol is out of .text or blacklisted */ @@ -2569,7 +2576,7 @@ static int __add_probe_trace_events(struct perf_probe_event *pev, warn_uprobe_event_compat(tev); /* Note that it is possible to skip all events because of blacklist */ - if (ret >= 0 && event) { + if (ret >= 0 && event && !probe_conf.silent) { /* Show how to use the event. */ pr_info("\nYou can now use it in all perf tools, such as:\n\n"); pr_info("\tperf record -e %s:%s -aR sleep 1\n\n", group, event); @@ -2865,7 +2872,10 @@ static int __del_trace_probe_event(int fd, struct str_node *ent) goto error; } - pr_info("Removed event: %s\n", ent->s); + if (!probe_conf.silent) + pr_info("Removed event: %s\n", ent->s); + else + pr_debug("Removed event: %s\n", ent->s); return 0; error: pr_warning("Failed to delete event: %s\n", diff --git a/tools/perf/util/probe-event.h b/tools/perf/util/probe-event.h index 4b7a951..116b0aa 100644 --- a/tools/perf/util/probe-event.h +++ b/tools/perf/util/probe-event.h @@ -13,6 +13,7 @@ struct probe_conf { bool force_add; bool no_inlines; int max_probes; + bool silent; }; extern struct probe_conf probe_conf; extern bool probe_event_dry_run; -- 1.8.3.4 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/