All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] perf tools: fix event parsing of comma-separated tracepoint events
@ 2010-11-30 22:27 Corey Ashford
  2010-12-01  1:05 ` Arnaldo Carvalho de Melo
  2010-12-01  9:14 ` [tip:perf/core] " tip-bot for Corey Ashford
  0 siblings, 2 replies; 3+ messages in thread
From: Corey Ashford @ 2010-11-30 22:27 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo, Frederic Weisbecker, Ingo Molnar,
	Julia Lawall, linux-kernel, Paul Mackerras, Peter Zijlstra
  Cc: Corey Ashford

There are number of issues that prevent the use of multiple tracepoint
events being specified in a -e/--event switch, separated by commas.

For example, perf stat -e irq:irq_handler_entry,irq:irq_handler_exit ...
fails because the tracepoint event parsing code doesn't recognize the
comma separator properly.

This patch corrects those issues.

Reported-by: Michael Ellerman <michaele@au1.ibm.com>
Signed-off-by: Corey Ashford <cjashfor@linux.vnet.ibm.com>
---
 tools/perf/util/parse-events.c |   12 ++++++++----
 1 files changed, 8 insertions(+), 4 deletions(-)

diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c
index 898aa94..73215e7 100644
--- a/tools/perf/util/parse-events.c
+++ b/tools/perf/util/parse-events.c
@@ -434,7 +434,7 @@ parse_single_tracepoint_event(char *sys_name,
 	id = atoll(id_buf);
 	attr->config = id;
 	attr->type = PERF_TYPE_TRACEPOINT;
-	*strp = evt_name + evt_length;
+	*strp += strlen(sys_name) + evt_length + 1; /* + 1 for the ':' */
 
 	attr->sample_type |= PERF_SAMPLE_RAW;
 	attr->sample_type |= PERF_SAMPLE_TIME;
@@ -495,7 +495,7 @@ static enum event_result parse_tracepoint_event(const char **strp,
 				    struct perf_event_attr *attr)
 {
 	const char *evt_name;
-	char *flags;
+	char *flags = NULL, *comma_loc;
 	char sys_name[MAX_EVENT_LENGTH];
 	unsigned int sys_length, evt_length;
 
@@ -514,6 +514,11 @@ static enum event_result parse_tracepoint_event(const char **strp,
 	sys_name[sys_length] = '\0';
 	evt_name = evt_name + 1;
 
+	comma_loc = strchr(evt_name, ',');
+	if (comma_loc) {
+		/* take the event name up to the comma */
+		evt_name = strndup(evt_name, comma_loc - evt_name);
+	}
 	flags = strchr(evt_name, ':');
 	if (flags) {
 		/* split it out: */
@@ -524,9 +529,8 @@ static enum event_result parse_tracepoint_event(const char **strp,
 	evt_length = strlen(evt_name);
 	if (evt_length >= MAX_EVENT_LENGTH)
 		return EVT_FAILED;
-
 	if (strpbrk(evt_name, "*?")) {
-		*strp = evt_name + evt_length;
+		*strp += strlen(sys_name) + evt_length;
 		return parse_multiple_tracepoint_event(sys_name, evt_name,
 						       flags);
 	} else
-- 
1.7.3.2


^ permalink raw reply related	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2010-12-01  9:15 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-11-30 22:27 [PATCH] perf tools: fix event parsing of comma-separated tracepoint events Corey Ashford
2010-12-01  1:05 ` Arnaldo Carvalho de Melo
2010-12-01  9:14 ` [tip:perf/core] " tip-bot for Corey Ashford

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.