mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Andi Kleen <andi@firstfloor.org>
To: acme@kernel.org
Cc: jolsa@kernel.org, sukadev@linux.vnet.ibm.com, eranian@google.com,
	linux-kernel@vger.kernel.org, Andi Kleen <ak@linux.intel.com>
Subject: [PATCH 08/10] perf, tools: Expand PMU events by prefix match
Date: Thu, 13 Oct 2016 14:15:30 -0700	[thread overview]
Message-ID: <1476393332-20732-9-git-send-email-andi@firstfloor.org> (raw)
In-Reply-To: <1476393332-20732-1-git-send-email-andi@firstfloor.org>

From: Andi Kleen <ak@linux.intel.com>

When the user specifies a pmu directly, expand it automatically
with a prefix match, similar as we do for the normal aliases now.

This allows to specify attributes for duplicated boxes quickly.
For example uncore_cbox_{0,8}/.../ can be now specified as cbox/.../
and it gets automatically expanded.

Signed-off-by: Andi Kleen <ak@linux.intel.com>
---
 tools/perf/util/parse-events.c | 25 +++++++++++++++++++++++++
 tools/perf/util/parse-events.h |  3 +++
 tools/perf/util/parse-events.y | 27 +++++++++++++++++++++++++--
 3 files changed, 53 insertions(+), 2 deletions(-)

diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c
index a2bbd17a0dc3..8b2333278988 100644
--- a/tools/perf/util/parse-events.c
+++ b/tools/perf/util/parse-events.c
@@ -2399,6 +2399,31 @@ int parse_events_term__clone(struct parse_events_term **new,
 			term->err_term, term->err_val);
 }
 
+int parse_events_copy_term_list(struct list_head *old,
+				 struct list_head **new)
+{
+	struct parse_events_term *term, *n;
+	int ret;
+
+	if (!old) {
+		*new = NULL;
+		return 0;
+	}
+
+	*new = malloc(sizeof(struct list_head));
+	if (!*new)
+		return -ENOMEM;
+	INIT_LIST_HEAD(*new);
+
+	list_for_each_entry (term, old, list) {
+		ret = parse_events_term__clone(&n, term);
+		if (ret)
+			return ret;
+		list_add_tail(&n->list, *new);
+	}
+	return 0;
+}
+
 void parse_events_terms__purge(struct list_head *terms)
 {
 	struct parse_events_term *term, *h;
diff --git a/tools/perf/util/parse-events.h b/tools/perf/util/parse-events.h
index da246a3ddb69..7ea95c35095c 100644
--- a/tools/perf/util/parse-events.h
+++ b/tools/perf/util/parse-events.h
@@ -164,6 +164,9 @@ int parse_events_add_breakpoint(struct list_head *list, int *idx,
 int parse_events_add_pmu(struct parse_events_evlist *data,
 			 struct list_head *list, char *name,
 			 struct list_head *head_config);
+int parse_events_copy_term_list(struct list_head *old,
+				 struct list_head **new);
+
 enum perf_pmu_event_symbol_type
 perf_pmu__parse_check(const char *name);
 void parse_events__set_leader(char *name, struct list_head *list);
diff --git a/tools/perf/util/parse-events.y b/tools/perf/util/parse-events.y
index 3a5196380609..790f0dd598b9 100644
--- a/tools/perf/util/parse-events.y
+++ b/tools/perf/util/parse-events.y
@@ -224,11 +224,34 @@ event_pmu:
 PE_NAME opt_event_config
 {
 	struct parse_events_evlist *data = _data;
-	struct list_head *list;
+	struct list_head *list, *orig_terms, *terms;
+
+	if (parse_events_copy_term_list($2, &orig_terms))
+		YYABORT;
 
 	ALLOC_LIST(list);
-	ABORT_ON(parse_events_add_pmu(data, list, $1, $2));
+	if (parse_events_add_pmu(data, list, $1, $2)) {
+		struct perf_pmu *pmu = NULL;
+		int ok = 0;
+
+		while ((pmu = perf_pmu__scan(pmu)) != NULL) {
+			char *name = pmu->name;
+
+			if (!strncmp(name, "uncore_", 7))
+				name += 7;
+			if (!strncmp($1, name, strlen($1))) {
+				if (parse_events_copy_term_list(orig_terms, &terms))
+					YYABORT;
+				if (!parse_events_add_pmu(data, list, pmu->name, terms))
+					ok++;
+				parse_events_terms__delete(terms);
+			}
+		}
+		if (!ok)
+			YYABORT;
+	}
 	parse_events_terms__delete($2);
+	parse_events_terms__delete(orig_terms);
 	$$ = list;
 }
 |
-- 
2.5.5

  parent reply	other threads:[~2016-10-13 21:17 UTC|newest]

Thread overview: 45+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-10-13 21:15 Support Intel uncore event lists Andi Kleen
2016-10-13 21:15 ` [PATCH 01/10] perf, tools: Factor out scale conversion code Andi Kleen
2016-10-14 15:35   ` Arnaldo Carvalho de Melo
2016-10-14 15:45     ` Andi Kleen
2016-10-14 16:08       ` Arnaldo Carvalho de Melo
2016-10-14 16:15         ` Andi Kleen
2016-10-14 16:25           ` Arnaldo Carvalho de Melo
2016-10-14 16:36             ` Andi Kleen
2016-10-14 16:38               ` Arnaldo Carvalho de Melo
2016-10-13 21:15 ` [PATCH 02/10] perf, tools: Only print Using CPUID message once Andi Kleen
2016-10-14 15:44   ` Arnaldo Carvalho de Melo
2016-10-24 19:02   ` [tip:perf/core] perf pmu: " tip-bot for Andi Kleen
2016-10-13 21:15 ` [PATCH 03/10] perf, tools: Add support for parsing uncore json files Andi Kleen
2016-10-14  9:07   ` Jiri Olsa
2016-10-14 12:18   ` Jiri Olsa
2016-10-14 12:21   ` Jiri Olsa
2016-10-14 12:23   ` Jiri Olsa
2016-10-14 15:32     ` Andi Kleen
2016-10-13 21:15 ` [PATCH 04/10] perf, tools: Support per pmu json aliases Andi Kleen
2016-10-14 12:31   ` Jiri Olsa
2016-10-13 21:15 ` [PATCH 05/10] perf, tools: Support event aliases for non cpu// pmus Andi Kleen
2016-10-17  9:35   ` Jiri Olsa
2016-10-17 10:28   ` Jiri Olsa
2016-10-13 21:15 ` [PATCH 06/10] perf, tools: Add debug support for outputing alias string Andi Kleen
2016-10-13 21:15 ` [PATCH 07/10] perf, tools: Collapse identically named events in perf stat Andi Kleen
2016-10-17 10:55   ` Jiri Olsa
2016-10-17 11:23   ` Jiri Olsa
2016-10-17 11:26   ` Jiri Olsa
2016-10-17 16:30     ` Andi Kleen
2016-10-17 17:28       ` Jiri Olsa
2016-10-17 18:12         ` Andi Kleen
2016-10-13 21:15 ` Andi Kleen [this message]
2016-10-17 11:35   ` [PATCH 08/10] perf, tools: Expand PMU events by prefix match Jiri Olsa
2016-10-17 11:40   ` Jiri Olsa
2016-10-17 16:56     ` Andi Kleen
2016-10-17 17:26       ` Jiri Olsa
2016-10-13 21:15 ` [PATCH 09/10] perf, tools: Support DividedBy header in JSON event list Andi Kleen
2016-10-17 11:44   ` Jiri Olsa
2016-10-17 16:27     ` Andi Kleen
2016-10-17 17:43       ` Jiri Olsa
2016-10-17 17:46         ` Jiri Olsa
2016-10-17 18:28         ` Andi Kleen
2016-10-13 21:15 ` [PATCH 10/10] perf, tools, stat: Output generic dividedby metric Andi Kleen
2016-10-17 10:58 ` Support Intel uncore event lists Jiri Olsa
2016-11-19  0:36 Support Intel uncore event lists in perf Andi Kleen
2016-11-19  0:36 ` [PATCH 08/10] perf, tools: Expand PMU events by prefix match Andi Kleen

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=1476393332-20732-9-git-send-email-andi@firstfloor.org \
    --to=andi@firstfloor.org \
    --cc=acme@kernel.org \
    --cc=ak@linux.intel.com \
    --cc=eranian@google.com \
    --cc=jolsa@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=sukadev@linux.vnet.ibm.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

all inboxes | Powered by JetHome®