All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jin Yao <yao.jin@linux.intel.com>
To: acme@kernel.org, jolsa@kernel.org, peterz@infradead.org,
	mingo@redhat.com, alexander.shishkin@linux.intel.com
Cc: Linux-kernel@vger.kernel.org, ak@linux.intel.com,
	kan.liang@intel.com, yao.jin@intel.com,
	Jin Yao <yao.jin@linux.intel.com>
Subject: [PATCH v5 11/26] perf parse-events: Compare with hybrid pmu name
Date: Fri, 23 Apr 2021 13:35:26 +0800	[thread overview]
Message-ID: <20210423053541.12521-12-yao.jin@linux.intel.com> (raw)
In-Reply-To: <20210423053541.12521-1-yao.jin@linux.intel.com>

On hybrid platform, user may want to enable event only on one pmu.
Following syntax will be supported:

cpu_core/<event>/
cpu_atom/<event>/

For hardware event, hardware cache event and raw event, two events
are created by default. We pass the specified pmu name in parse_state
and it would be checked before event creation. So next only the
event with the specified pmu would be created.

Signed-off-by: Jin Yao <yao.jin@linux.intel.com>
---
v5:
 - No change.

v4:
 - New in v4.

 tools/perf/util/parse-events-hybrid.c | 21 ++++++++++++++++++++-
 tools/perf/util/parse-events-hybrid.h |  3 ++-
 tools/perf/util/parse-events.c        |  5 +++--
 tools/perf/util/parse-events.h        |  4 +++-
 tools/perf/util/parse-events.y        |  9 ++++++---
 5 files changed, 34 insertions(+), 8 deletions(-)

diff --git a/tools/perf/util/parse-events-hybrid.c b/tools/perf/util/parse-events-hybrid.c
index e27b747080e1..10160ab126f9 100644
--- a/tools/perf/util/parse-events-hybrid.c
+++ b/tools/perf/util/parse-events-hybrid.c
@@ -59,6 +59,15 @@ static int create_event_hybrid(__u32 config_type, int *idx,
 	return 0;
 }
 
+static int pmu_cmp(struct parse_events_state *parse_state,
+		   struct perf_pmu *pmu)
+{
+	if (!parse_state->hybrid_pmu_name)
+		return 0;
+
+	return strcmp(parse_state->hybrid_pmu_name, pmu->name);
+}
+
 static int add_hw_hybrid(struct parse_events_state *parse_state,
 			 struct list_head *list, struct perf_event_attr *attr,
 			 char *name, struct list_head *config_terms)
@@ -67,6 +76,9 @@ static int add_hw_hybrid(struct parse_events_state *parse_state,
 	int ret;
 
 	perf_pmu__for_each_hybrid_pmu(pmu) {
+		if (pmu_cmp(parse_state, pmu))
+			continue;
+
 		ret = create_event_hybrid(PERF_TYPE_HARDWARE,
 					  &parse_state->idx, list, attr, name,
 					  config_terms, pmu);
@@ -103,6 +115,9 @@ static int add_raw_hybrid(struct parse_events_state *parse_state,
 	int ret;
 
 	perf_pmu__for_each_hybrid_pmu(pmu) {
+		if (pmu_cmp(parse_state, pmu))
+			continue;
+
 		ret = create_raw_event_hybrid(&parse_state->idx, list, attr,
 					      name, config_terms, pmu);
 		if (ret)
@@ -138,7 +153,8 @@ int parse_events__add_numeric_hybrid(struct parse_events_state *parse_state,
 int parse_events__add_cache_hybrid(struct list_head *list, int *idx,
 				   struct perf_event_attr *attr, char *name,
 				   struct list_head *config_terms,
-				   bool *hybrid)
+				   bool *hybrid,
+				   struct parse_events_state *parse_state)
 {
 	struct perf_pmu *pmu;
 	int ret;
@@ -149,6 +165,9 @@ int parse_events__add_cache_hybrid(struct list_head *list, int *idx,
 
 	*hybrid = true;
 	perf_pmu__for_each_hybrid_pmu(pmu) {
+		if (pmu_cmp(parse_state, pmu))
+			continue;
+
 		ret = create_event_hybrid(PERF_TYPE_HW_CACHE, idx, list,
 					  attr, name, config_terms, pmu);
 		if (ret)
diff --git a/tools/perf/util/parse-events-hybrid.h b/tools/perf/util/parse-events-hybrid.h
index 9ad33cd0cef4..f33bd67aa851 100644
--- a/tools/perf/util/parse-events-hybrid.h
+++ b/tools/perf/util/parse-events-hybrid.h
@@ -17,6 +17,7 @@ int parse_events__add_numeric_hybrid(struct parse_events_state *parse_state,
 int parse_events__add_cache_hybrid(struct list_head *list, int *idx,
 				   struct perf_event_attr *attr, char *name,
 				   struct list_head *config_terms,
-				   bool *hybrid);
+				   bool *hybrid,
+				   struct parse_events_state *parse_state);
 
 #endif /* __PERF_PARSE_EVENTS_HYBRID_H */
diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c
index cc3b8d77c1c1..26f96a30964f 100644
--- a/tools/perf/util/parse-events.c
+++ b/tools/perf/util/parse-events.c
@@ -453,7 +453,8 @@ static int config_attr(struct perf_event_attr *attr,
 int parse_events_add_cache(struct list_head *list, int *idx,
 			   char *type, char *op_result1, char *op_result2,
 			   struct parse_events_error *err,
-			   struct list_head *head_config)
+			   struct list_head *head_config,
+			   struct parse_events_state *parse_state)
 {
 	struct perf_event_attr attr;
 	LIST_HEAD(config_terms);
@@ -524,7 +525,7 @@ int parse_events_add_cache(struct list_head *list, int *idx,
 
 	ret = parse_events__add_cache_hybrid(list, idx, &attr,
 					     config_name ? : name, &config_terms,
-					     &hybrid);
+					     &hybrid, parse_state);
 	if (hybrid)
 		return ret;
 
diff --git a/tools/perf/util/parse-events.h b/tools/perf/util/parse-events.h
index c4f2f96304ce..bf6e41aa9b6a 100644
--- a/tools/perf/util/parse-events.h
+++ b/tools/perf/util/parse-events.h
@@ -138,6 +138,7 @@ struct parse_events_state {
 	struct list_head	  *terms;
 	int			   stoken;
 	struct perf_pmu		  *fake_pmu;
+	char			  *hybrid_pmu_name;
 };
 
 void parse_events__handle_error(struct parse_events_error *err, int idx,
@@ -188,7 +189,8 @@ int parse_events_add_tool(struct parse_events_state *parse_state,
 int parse_events_add_cache(struct list_head *list, int *idx,
 			   char *type, char *op_result1, char *op_result2,
 			   struct parse_events_error *error,
-			   struct list_head *head_config);
+			   struct list_head *head_config,
+			   struct parse_events_state *parse_state);
 int parse_events_add_breakpoint(struct list_head *list, int *idx,
 				u64 addr, char *type, u64 len);
 int parse_events_add_pmu(struct parse_events_state *parse_state,
diff --git a/tools/perf/util/parse-events.y b/tools/perf/util/parse-events.y
index d57ac86ce7ca..aba12a4d488e 100644
--- a/tools/perf/util/parse-events.y
+++ b/tools/perf/util/parse-events.y
@@ -454,7 +454,8 @@ PE_NAME_CACHE_TYPE '-' PE_NAME_CACHE_OP_RESULT '-' PE_NAME_CACHE_OP_RESULT opt_e
 
 	list = alloc_list();
 	ABORT_ON(!list);
-	err = parse_events_add_cache(list, &parse_state->idx, $1, $3, $5, error, $6);
+	err = parse_events_add_cache(list, &parse_state->idx, $1, $3, $5, error, $6,
+				     parse_state);
 	parse_events_terms__delete($6);
 	free($1);
 	free($3);
@@ -475,7 +476,8 @@ PE_NAME_CACHE_TYPE '-' PE_NAME_CACHE_OP_RESULT opt_event_config
 
 	list = alloc_list();
 	ABORT_ON(!list);
-	err = parse_events_add_cache(list, &parse_state->idx, $1, $3, NULL, error, $4);
+	err = parse_events_add_cache(list, &parse_state->idx, $1, $3, NULL, error, $4,
+				     parse_state);
 	parse_events_terms__delete($4);
 	free($1);
 	free($3);
@@ -495,7 +497,8 @@ PE_NAME_CACHE_TYPE opt_event_config
 
 	list = alloc_list();
 	ABORT_ON(!list);
-	err = parse_events_add_cache(list, &parse_state->idx, $1, NULL, NULL, error, $2);
+	err = parse_events_add_cache(list, &parse_state->idx, $1, NULL, NULL, error, $2,
+				     parse_state);
 	parse_events_terms__delete($2);
 	free($1);
 	if (err) {
-- 
2.17.1


  parent reply	other threads:[~2021-04-23  5:37 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-04-23  5:35 [PATCH v5 00/26] perf tool: AlderLake hybrid support series 1 Jin Yao
2021-04-23  5:35 ` [PATCH v5 01/26] tools headers uapi: Update tools's copy of linux/perf_event.h Jin Yao
2021-04-23  5:35 ` [PATCH v5 02/26] perf jevents: Support unit value "cpu_core" and "cpu_atom" Jin Yao
2021-04-23  5:35 ` [PATCH v5 03/26] perf pmu: Simplify arguments of __perf_pmu__new_alias Jin Yao
2021-04-23  5:35 ` [PATCH v5 04/26] perf pmu: Save pmu name Jin Yao
2021-04-23  5:35 ` [PATCH v5 05/26] perf pmu: Save detected hybrid pmus to a global pmu list Jin Yao
2021-04-23  5:35 ` [PATCH v5 06/26] perf pmu: Add hybrid helper functions Jin Yao
2021-04-23  5:35 ` [PATCH v5 07/26] perf stat: Uniquify hybrid event name Jin Yao
2021-04-23  5:35 ` [PATCH v5 08/26] perf parse-events: Create two hybrid hardware events Jin Yao
2021-04-23  5:35 ` [PATCH v5 09/26] perf parse-events: Create two hybrid cache events Jin Yao
2021-04-23  5:35 ` [PATCH v5 10/26] perf parse-events: Create two hybrid raw events Jin Yao
2021-04-23  5:35 ` Jin Yao [this message]
2021-04-23  5:35 ` [PATCH v5 12/26] perf parse-events: Support event inside hybrid pmu Jin Yao
2021-04-25 16:17   ` Jiri Olsa
2021-04-26  0:56     ` Jin, Yao
2021-04-26 21:34       ` Jiri Olsa
2021-04-23  5:35 ` [PATCH v5 13/26] perf record: Create two hybrid 'cycles' events by default Jin Yao
2021-04-23  5:35 ` [PATCH v5 14/26] perf stat: Add default hybrid events Jin Yao
2021-04-23  5:35 ` [PATCH v5 15/26] perf stat: Filter out unmatched aggregation for hybrid event Jin Yao
2021-04-23  5:35 ` [PATCH v5 16/26] perf stat: Warn group events from different hybrid PMU Jin Yao
2021-04-23  5:35 ` [PATCH v5 17/26] perf record: Uniquify hybrid event name Jin Yao
2021-04-23  5:35 ` [PATCH v5 18/26] perf tests: Add hybrid cases for 'Parse event definition strings' test Jin Yao
2021-04-23  5:35 ` [PATCH v5 19/26] perf tests: Add hybrid cases for 'Roundtrip evsel->name' test Jin Yao
2021-04-23  5:35 ` [PATCH v5 20/26] perf tests: Skip 'Setup struct perf_event_attr' test for hybrid Jin Yao
2021-04-23  5:35 ` [PATCH v5 21/26] perf tests: Support 'Track with sched_switch' " Jin Yao
2021-04-23  5:35 ` [PATCH v5 22/26] perf tests: Support 'Parse and process metrics' " Jin Yao
2021-04-23  5:35 ` [PATCH v5 23/26] perf tests: Support 'Session topology' " Jin Yao
2021-04-23  5:35 ` [PATCH v5 24/26] perf tests: Support 'Convert perf time to TSC' " Jin Yao
2021-04-23  5:35 ` [PATCH v5 25/26] perf tests: Skip 'perf stat metrics (shadow stat) test' " Jin Yao
2021-04-23  5:35 ` [PATCH v5 26/26] perf Documentation: Document intel-hybrid support Jin Yao
2021-04-26 20:41 ` [PATCH v5 00/26] perf tool: AlderLake hybrid support series 1 Arnaldo Carvalho de Melo
2021-04-27  0:48   ` Jin, Yao

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=20210423053541.12521-12-yao.jin@linux.intel.com \
    --to=yao.jin@linux.intel.com \
    --cc=Linux-kernel@vger.kernel.org \
    --cc=acme@kernel.org \
    --cc=ak@linux.intel.com \
    --cc=alexander.shishkin@linux.intel.com \
    --cc=jolsa@kernel.org \
    --cc=kan.liang@intel.com \
    --cc=mingo@redhat.com \
    --cc=peterz@infradead.org \
    --cc=yao.jin@intel.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 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.