public inbox for systemtap@sourceware.org
 help / color / mirror / Atom feed
From: Masami Hiramatsu <mhiramat@redhat.com>
To: Ingo Molnar <mingo@elte.hu>,
	Frederic Weisbecker <fweisbec@gmail.com>,
	        lkml<linux-kernel@vger.kernel.org>
Cc: Paul Mackerras <paulus@samba.org>,
	        Arnaldo Carvalho de Melo <acme@redhat.com>,
	        Steven Rostedt <rostedt@goodmis.org>,
	        Jim Keniston <jkenisto@us.ibm.com>,
	        Ananth N Mavinakayanahalli <ananth@in.ibm.com>,
	        Christoph Hellwig <hch@infradead.org>,
	        "Frank Ch. Eigler" <fche@redhat.com>,
	Jason Baron <jbaron@redhat.com>,
	        "K.Prasad" <prasad@linux.vnet.ibm.com>,
	        Peter Zijlstra <peterz@infradead.org>,
	        Srikar Dronamraju <srikar@linux.vnet.ibm.com>,
	        systemtap<systemtap@sources.redhat.com>,
	        DLE<dle-develop@lists.sourceforge.net>
Subject: [PATCH -tip 14/14] perf probe: Fix to show which probe point is not 	found
Date: Tue, 15 Dec 2009 15:28:00 -0000	[thread overview]
Message-ID: <20091215153247.17436.49068.stgit@dhcp-100-2-132.bos.redhat.com> (raw)
In-Reply-To: <20091215153106.17436.66584.stgit@dhcp-100-2-132.bos.redhat.com>

Fix perf probe to show which probe point is not found.
With out this patch, it shows just "No probe point found."
This doesn't help users if they specify several probes.
e.g.

# perf probe -f --add schedule --add test
  Fatal: No probe point found.

This patch makes error message more helpful as below.

# perf probe --add schedule --add test
  Fatal: Probe point 'test' not found. - probe not added.

Signed-off-by: Masami Hiramatsu <mhiramat@redhat.com>
Cc: Ingo Molnar <mingo@elte.hu>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Steven Rostedt <rostedt@goodmis.org>
Cc: Jim Keniston <jkenisto@us.ibm.com>
Cc: Ananth N Mavinakayanahalli <ananth@in.ibm.com>
Cc: Christoph Hellwig <hch@infradead.org>
Cc: Frank Ch. Eigler <fche@redhat.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Jason Baron <jbaron@redhat.com>
Cc: K.Prasad <prasad@linux.vnet.ibm.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Srikar Dronamraju <srikar@linux.vnet.ibm.com>
---

 tools/perf/builtin-probe.c    |    7 +++++--
 tools/perf/util/probe-event.c |   34 ++++++++++++++++++++++++----------
 tools/perf/util/probe-event.h |    1 +
 3 files changed, 30 insertions(+), 12 deletions(-)

diff --git a/tools/perf/builtin-probe.c b/tools/perf/builtin-probe.c
index f019536..beb49e3 100644
--- a/tools/perf/builtin-probe.c
+++ b/tools/perf/builtin-probe.c
@@ -265,8 +265,11 @@ int cmd_probe(int argc, const char **argv, const char *prefix __used)
 		ret = find_probepoint(fd, pp);
 		if (ret > 0)
 			continue;
-		if (ret == 0)	/* No error but failed to find probe point. */
-			die("No probe point found.");
+		if (ret == 0) {	/* No error but failed to find probe point. */
+			synthesize_perf_probe_point(pp);
+			die("Probe point '%s' not found. - probe not added.",
+			    pp->probes[0]);
+		}
 		/* Error path */
 		if (session.need_dwarf) {
 			if (ret == -ENOENT)
diff --git a/tools/perf/util/probe-event.c b/tools/perf/util/probe-event.c
index e74ecfc..3c2e743 100644
--- a/tools/perf/util/probe-event.c
+++ b/tools/perf/util/probe-event.c
@@ -249,11 +249,12 @@ void parse_trace_kprobe_event(const char *str, struct probe_point *pp)
 	argv_free(argv);
 }
 
-int synthesize_perf_probe_event(struct probe_point *pp)
+/* Synthesize only probe point (not argument) */
+int synthesize_perf_probe_point(struct probe_point *pp)
 {
 	char *buf;
 	char offs[64] = "", line[64] = "";
-	int i, len, ret;
+	int ret;
 
 	pp->probes[0] = buf = zalloc(MAX_CMDLEN);
 	if (!buf)
@@ -274,10 +275,24 @@ int synthesize_perf_probe_event(struct probe_point *pp)
 				 offs, pp->retprobe ? "%return" : "", line);
 	else
 		ret = e_snprintf(buf, MAX_CMDLEN, "%s%s", pp->file, line);
-	if (ret <= 0)
-		goto error;
-	len = ret;
+	if (ret <= 0) {
+error:
+		free(pp->probes[0]);
+		pp->probes[0] = NULL;
+	}
+	return ret;
+}
+
+int synthesize_perf_probe_event(struct probe_point *pp)
+{
+	char *buf;
+	int i, len, ret;
 
+	len = synthesize_perf_probe_point(pp);
+	if (len < 0)
+		return 0;
+
+	buf = pp->probes[0];
 	for (i = 0; i < pp->nr_args; i++) {
 		ret = e_snprintf(&buf[len], MAX_CMDLEN - len, " %s",
 				 pp->args[i]);
@@ -290,6 +305,7 @@ int synthesize_perf_probe_event(struct probe_point *pp)
 	return pp->found;
 error:
 	free(pp->probes[0]);
+	pp->probes[0] = NULL;
 
 	return ret;
 }
@@ -319,6 +335,7 @@ int synthesize_trace_kprobe_event(struct probe_point *pp)
 	return pp->found;
 error:
 	free(pp->probes[0]);
+	pp->probes[0] = NULL;
 
 	return ret;
 }
@@ -418,7 +435,7 @@ static void show_perf_probe_event(const char *event, const char *place,
 /* List up current perf-probe events */
 void show_perf_probe_events(void)
 {
-	int fd, nr;
+	int fd;
 	struct probe_point pp;
 	struct strlist *rawlist;
 	struct str_node *ent;
@@ -430,10 +447,7 @@ void show_perf_probe_events(void)
 	strlist__for_each(ent, rawlist) {
 		parse_trace_kprobe_event(ent->s, &pp);
 		/* Synthesize only event probe point */
-		nr = pp.nr_args;
-		pp.nr_args = 0;
-		synthesize_perf_probe_event(&pp);
-		pp.nr_args = nr;
+		synthesize_perf_probe_point(&pp);
 		/* Show an event */
 		show_perf_probe_event(pp.event, pp.probes[0], &pp);
 		clear_probe_point(&pp);
diff --git a/tools/perf/util/probe-event.h b/tools/perf/util/probe-event.h
index 8fd3052..7f1d499 100644
--- a/tools/perf/util/probe-event.h
+++ b/tools/perf/util/probe-event.h
@@ -7,6 +7,7 @@
 
 extern void parse_perf_probe_event(const char *str, struct probe_point *pp,
 				   bool *need_dwarf);
+extern int synthesize_perf_probe_point(struct probe_point *pp);
 extern int synthesize_perf_probe_event(struct probe_point *pp);
 extern void parse_trace_kprobe_event(const char *str, struct probe_point *pp);
 extern int synthesize_trace_kprobe_event(struct probe_point *pp);


-- 
Masami Hiramatsu

Software Engineer
Hitachi Computer Products (America), Inc.
Software Solutions Division

e-mail: mhiramat@redhat.com

  parent reply	other threads:[~2009-12-15 15:28 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-12-15 15:26 [PATCH -tip 00/14] perf-probe updates Masami Hiramatsu
2009-12-15 15:26 ` [PATCH -tip 01/14] perf probe: Cleanup struct session in builtin-probe.c Masami Hiramatsu
2009-12-15 19:27   ` [tip:perf/urgent] " tip-bot for Masami Hiramatsu
2009-12-15 15:26 ` [PATCH -tip 02/14] perf probe: Check the result of e_snprintf() Masami Hiramatsu
2009-12-15 19:26   ` [tip:perf/urgent] " tip-bot for Masami Hiramatsu
2009-12-15 15:27 ` [PATCH -tip 04/14] perf probe: Show need-dwarf message only if it is really needed Masami Hiramatsu
2009-12-15 19:27   ` [tip:perf/urgent] " tip-bot for Masami Hiramatsu
2009-12-15 15:27 ` [PATCH -tip 07/14] perf tools: Add for_each macros for strlist Masami Hiramatsu
2009-12-15 19:28   ` [tip:perf/urgent] " tip-bot for Masami Hiramatsu
2009-12-15 15:27 ` [PATCH -tip 09/14] perf probe: Add glob matching support on --del Masami Hiramatsu
2009-12-15 19:28   ` [tip:perf/urgent] " tip-bot for Masami Hiramatsu
2009-12-15 15:27 ` [PATCH -tip 05/14] perf probe: Fix --del to show info instead of warning Masami Hiramatsu
2009-12-15 19:29   ` [tip:perf/urgent] " tip-bot for Masami Hiramatsu
2009-12-15 15:27 ` [PATCH -tip 06/14] perf probe: Fix --del to update current event list Masami Hiramatsu
2009-12-15 19:29   ` [tip:perf/urgent] " tip-bot for Masami Hiramatsu
2009-12-15 15:27 ` [PATCH -tip 03/14] perf probe: Check hyphen only argument Masami Hiramatsu
2009-12-15 19:29   ` [tip:perf/urgent] " tip-bot for Masami Hiramatsu
2009-12-15 15:27 ` [PATCH -tip 08/14] perf probe: Use strlist__for_each macros in probe-event.c Masami Hiramatsu
2009-12-15 19:28   ` [tip:perf/urgent] " tip-bot for Masami Hiramatsu
2009-12-15 15:28 ` [PATCH -tip 10/14] perf probe: Support event name for --add option Masami Hiramatsu
2009-12-15 19:54   ` [tip:perf/urgent] " tip-bot for Masami Hiramatsu
2009-12-15 15:28 ` [PATCH -tip 12/14] perf probe: Check build-id of vmlinux Masami Hiramatsu
2009-12-15 19:29   ` [tip:perf/urgent] " tip-bot for Masami Hiramatsu
2009-12-15 15:28 ` [PATCH -tip 13/14] perf probe: Check symbols in symtab/kallsyms Masami Hiramatsu
2009-12-15 19:28   ` [tip:perf/urgent] " tip-bot for Masami Hiramatsu
2009-12-15 15:28 ` [PATCH -tip 11/14] perf probe: Reject second attempt of adding same-name event Masami Hiramatsu
2009-12-15 19:29   ` [tip:perf/urgent] " tip-bot for Masami Hiramatsu
2009-12-15 15:28 ` Masami Hiramatsu [this message]
2009-12-15 19:28   ` [tip:perf/urgent] perf probe: Fix to show which probe point is not found tip-bot for Masami Hiramatsu
2009-12-15 19:23 ` [PATCH -tip 00/14] perf-probe updates Ingo Molnar

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20091215153247.17436.49068.stgit@dhcp-100-2-132.bos.redhat.com \
    --to=mhiramat@redhat.com \
    --cc=acme@redhat.com \
    --cc=ananth@in.ibm.com \
    --cc=dle-develop@lists.sourceforge.net \
    --cc=fche@redhat.com \
    --cc=fweisbec@gmail.com \
    --cc=hch@infradead.org \
    --cc=jbaron@redhat.com \
    --cc=jkenisto@us.ibm.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@elte.hu \
    --cc=paulus@samba.org \
    --cc=peterz@infradead.org \
    --cc=prasad@linux.vnet.ibm.com \
    --cc=rostedt@goodmis.org \
    --cc=srikar@linux.vnet.ibm.com \
    --cc=systemtap@sources.redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).