All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jiri Olsa <jolsa@redhat.com>
To: Jin Yao <yao.jin@linux.intel.com>
Cc: acme@kernel.org, jolsa@kernel.org, peterz@infradead.org,
	mingo@redhat.com, alexander.shishkin@linux.intel.com,
	Linux-kernel@vger.kernel.org, ak@linux.intel.com,
	kan.liang@intel.com, yao.jin@intel.com
Subject: Re: [PATCH v3 12/27] perf parse-events: Support no alias assigned event inside hybrid PMU
Date: Thu, 15 Apr 2021 13:03:39 +0200	[thread overview]
Message-ID: <YHgdixeqOu2NarkC@krava> (raw)
In-Reply-To: <20210329070046.8815-13-yao.jin@linux.intel.com>

On Mon, Mar 29, 2021 at 03:00:31PM +0800, Jin Yao wrote:

SNIP

> ---
> v3:
>  - Rename the patch:
>    'perf parse-events: Support hardware events inside PMU' -->
>    'perf parse-events: Support no alias assigned event inside hybrid PMU'
> 
>  - Major code is moved to parse-events-hybrid.c.
>  - Refine the code.
> 
>  tools/perf/util/parse-events-hybrid.c | 18 +++++-
>  tools/perf/util/parse-events-hybrid.h |  3 +-
>  tools/perf/util/parse-events.c        | 80 +++++++++++++++++++++++++--
>  tools/perf/util/parse-events.h        |  4 +-
>  tools/perf/util/parse-events.y        |  9 ++-
>  tools/perf/util/pmu.c                 |  4 +-
>  tools/perf/util/pmu.h                 |  2 +-
>  7 files changed, 108 insertions(+), 12 deletions(-)

please move the support to pass pmu_name and filter
on it within hybrid code in to separate patch

> 
> diff --git a/tools/perf/util/parse-events-hybrid.c b/tools/perf/util/parse-events-hybrid.c
> index 8a630cbab8f3..5bf176b55573 100644
> --- a/tools/perf/util/parse-events-hybrid.c
> +++ b/tools/perf/util/parse-events-hybrid.c
> @@ -64,6 +64,11 @@ static int add_hw_hybrid(struct parse_events_state *parse_state,
>  	int ret;
>  
>  	perf_pmu__for_each_hybrid_pmu(pmu) {
> +		if (parse_state->pmu_name &&
> +		    strcmp(parse_state->pmu_name, pmu->name)) {
> +			continue;

please add this check to separate function

	if (pmu_cmp(parse_stat))
		continue;

SNIP

> +	if (!parse_state->fake_pmu && head_config && !found &&
> +	    perf_pmu__is_hybrid(name)) {
> +		struct parse_events_term *term;
> +		int ret;
> +
> +		list_for_each_entry(term, head_config, list) {
> +			if (!term->config)
> +				continue;
> +
> +			ret = parse_events__with_hybrid_pmu(parse_state,
> +							    term->config,
> +							    name, &found,
> +							    list);
> +			if (found)
> +				return ret;

what if there are more terms in head_config?
should we make sure there's just one term and fail if there's more?

also we already know the perf_pmu__is_hybrid(name) is true,
so can't we just call:

  return parse_events__with_hybrid_pmu(....)


> +		}
> +	}
>  
>  	if (verbose > 1) {
>  		fprintf(stderr, "After aliases, add event pmu '%s' with '",
> @@ -1605,6 +1630,15 @@ int parse_events_multi_pmu_add(struct parse_events_state *parse_state,
>  	struct perf_pmu *pmu = NULL;
>  	int ok = 0;
>  
> +	if (parse_state->pmu_name) {
> +		list = malloc(sizeof(struct list_head));
> +		if (!list)
> +			return -1;
> +		INIT_LIST_HEAD(list);
> +		*listp = list;
> +		return 0;
> +	}

hum, why is this needed?

> +
>  	*listp = NULL;
>  	/* Add it for all PMUs that support the alias */
>  	list = malloc(sizeof(struct list_head));
> @@ -2176,6 +2210,44 @@ int parse_events_terms(struct list_head *terms, const char *str)
>  	return ret;
>  }
>  
> +static int list_entries_nr(struct list_head *list)
> +{
> +	struct list_head *pos;
> +	int n = 0;
> +
> +	list_for_each(pos, list)
> +		n++;
> +
> +	return n;
> +}
> +
> +static int parse_events__with_hybrid_pmu(struct parse_events_state *parse_state,
> +					 const char *str, char *pmu_name,
> +					 bool *found, struct list_head *list)
> +{
> +	struct parse_events_state ps = {
> +		.list           = LIST_HEAD_INIT(ps.list),
> +		.stoken         = PE_START_EVENTS,
> +		.pmu_name       = pmu_name,
> +		.idx            = parse_state->idx,
> +	};

could we add this pmu_name directly to __parse_events?

it duplicates the code plus there are some extra checks
you don't do in here and which might be needed, like
last->cmdline_group_boundary setup

> +	int ret;
> +
> +	*found = false;
> +	ret = parse_events__scanner(str, &ps);
> +	perf_pmu__parse_cleanup();
> +
> +	if (!ret) {
> +		if (!list_empty(&ps.list)) {
> +			*found = true;
> +			list_splice(&ps.list, list);
> +			parse_state->idx = list_entries_nr(list);

could you just use ps.idx instead of list_entries_nr ?

> +		}
> +	}
> +
> +	return ret;
> +}
> +
>  int __parse_events(struct evlist *evlist, const char *str,
>  		   struct parse_events_error *err, struct perf_pmu *fake_pmu)
>  {
> diff --git a/tools/perf/util/parse-events.h b/tools/perf/util/parse-events.h
> index c4f2f96304ce..f9d8e8e41c38 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			  *pmu_name;

so it's hybrid specific, we should name it like hybrid_pmu_name or such

thanks,
jirka


  parent reply	other threads:[~2021-04-15 11:03 UTC|newest]

Thread overview: 43+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-03-29  7:00 [PATCH v3 00/27] perf tool: AlderLake hybrid support series 1 Jin Yao
2021-03-29  7:00 ` [PATCH v3 01/27] tools headers uapi: Update tools's copy of linux/perf_event.h Jin Yao
2021-03-29  7:00 ` [PATCH v3 02/27] perf jevents: Support unit value "cpu_core" and "cpu_atom" Jin Yao
2021-03-29  7:00 ` [PATCH v3 03/27] perf pmu: Simplify arguments of __perf_pmu__new_alias Jin Yao
2021-03-29  7:00 ` [PATCH v3 04/27] perf pmu: Save pmu name Jin Yao
2021-03-29  7:00 ` [PATCH v3 05/27] perf pmu: Save detected hybrid pmus to a global pmu list Jin Yao
2021-03-29  7:00 ` [PATCH v3 06/27] perf pmu: Add hybrid helper functions Jin Yao
2021-03-29  7:00 ` [PATCH v3 07/27] perf stat: Uniquify hybrid event name Jin Yao
2021-03-29  7:00 ` [PATCH v3 08/27] perf parse-events: Create two hybrid hardware events Jin Yao
2021-03-29  7:00 ` [PATCH v3 09/27] perf parse-events: Create two hybrid cache events Jin Yao
2021-04-09 13:48   ` Jiri Olsa
2021-04-12  1:15     ` Jin, Yao
2021-03-29  7:00 ` [PATCH v3 10/27] perf parse-events: Create two hybrid raw events Jin Yao
2021-04-09 13:49   ` Jiri Olsa
2021-04-12  1:14     ` Jin, Yao
2021-03-29  7:00 ` [PATCH v3 11/27] perf pmu: Support 'cycles' and 'branches' inside hybrid PMU Jin Yao
2021-04-09 13:48   ` Jiri Olsa
2021-04-12  2:01     ` Jin, Yao
2021-03-29  7:00 ` [PATCH v3 12/27] perf parse-events: Support no alias assigned event " Jin Yao
2021-04-09 13:47   ` Jiri Olsa
2021-04-12  2:51     ` Jin, Yao
2021-04-13 12:36       ` Jiri Olsa
2021-04-15 11:03   ` Jiri Olsa [this message]
2021-04-15 13:36     ` Jin, Yao
2021-04-15 14:11       ` Jiri Olsa
2021-04-15 14:53         ` Jin, Yao
2021-04-15 19:39           ` Jiri Olsa
2021-04-16  1:57             ` Jin, Yao
2021-03-29  7:00 ` [PATCH v3 13/27] perf record: Create two hybrid 'cycles' events by default Jin Yao
2021-03-29  7:00 ` [PATCH v3 14/27] perf stat: Add default hybrid events Jin Yao
2021-03-29  7:00 ` [PATCH v3 15/27] perf stat: Filter out unmatched aggregation for hybrid event Jin Yao
2021-03-29  7:00 ` [PATCH v3 16/27] perf stat: Warn group events from different hybrid PMU Jin Yao
2021-03-29  7:00 ` [PATCH v3 17/27] perf script: Support PERF_TYPE_HARDWARE_PMU and PERF_TYPE_HW_CACHE_PMU Jin Yao
2021-03-29  7:00 ` [PATCH v3 18/27] perf record: Uniquify hybrid event name Jin Yao
2021-03-29  7:00 ` [PATCH v3 19/27] perf tests: Add hybrid cases for 'Parse event definition strings' test Jin Yao
2021-03-29  7:00 ` [PATCH v3 20/27] perf tests: Add hybrid cases for 'Roundtrip evsel->name' test Jin Yao
2021-03-29  7:00 ` [PATCH v3 21/27] perf tests: Skip 'Setup struct perf_event_attr' test for hybrid Jin Yao
2021-03-29  7:00 ` [PATCH v3 22/27] perf tests: Support 'Track with sched_switch' " Jin Yao
2021-03-29  7:00 ` [PATCH v3 23/27] perf tests: Support 'Parse and process metrics' " Jin Yao
2021-03-29  7:00 ` [PATCH v3 24/27] perf tests: Support 'Session topology' " Jin Yao
2021-03-29  7:00 ` [PATCH v3 25/27] perf tests: Support 'Convert perf time to TSC' " Jin Yao
2021-03-29  7:00 ` [PATCH v3 26/27] perf tests: Skip 'perf stat metrics (shadow stat) test' " Jin Yao
2021-03-29  7:00 ` [PATCH v3 27/27] perf Documentation: Document intel-hybrid support 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=YHgdixeqOu2NarkC@krava \
    --to=jolsa@redhat.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 \
    --cc=yao.jin@linux.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.