From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753530AbbGIMoD (ORCPT ); Thu, 9 Jul 2015 08:44:03 -0400 Received: from szxga03-in.huawei.com ([119.145.14.66]:34618 "EHLO szxga03-in.huawei.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753525AbbGIMnz (ORCPT ); Thu, 9 Jul 2015 08:43:55 -0400 From: Wang Nan To: , CC: , , , , Subject: [PATCH 26/39] perf tools: Suppress probing messages when probing by BPF loading Date: Thu, 9 Jul 2015 12:35:29 +0000 Message-ID: <1436445342-1402-27-git-send-email-wangnan0@huawei.com> X-Mailer: git-send-email 1.8.3.4 In-Reply-To: <1436445342-1402-1-git-send-email-wangnan0@huawei.com> References: <1436445342-1402-1-git-send-email-wangnan0@huawei.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [10.107.197.200] X-CFilter-Loop: Reflected X-Mirapoint-Virus-RAPID-Raw: score=unknown(0), refid=str=0001.0A020203.559E6AC6.0035,ss=1,re=0.000,recu=0.000,reip=0.000,cl=1,cld=1,fgs=0, ip=0.0.0.0, so=2013-05-26 15:14:31, dmn=2013-03-21 17:37:32 X-Mirapoint-Loop-Id: 086bd2c1f14a248b49e89f35d6a881f6 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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 --- 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 7a152ad..bd2ebe1 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