lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20190611161023.GD18242@krava>
Date:   Tue, 11 Jun 2019 18:10:23 +0200
From:   Jiri Olsa <jolsa@...hat.com>
To:     John Garry <john.garry@...wei.com>
Cc:     peterz@...radead.org, mingo@...hat.com, acme@...nel.org,
        alexander.shishkin@...ux.intel.com, namhyung@...nel.org,
        tmricht@...ux.ibm.com, brueckner@...ux.ibm.com,
        kan.liang@...ux.intel.com, ben@...adent.org.uk,
        mathieu.poirier@...aro.org, mark.rutland@....com,
        will.deacon@....com, linux-kernel@...r.kernel.org,
        linuxarm@...wei.com, linux-arm-kernel@...ts.infradead.org,
        zhangshaokun@...ilicon.com, ak@...ux.intel.com
Subject: Re: [PATCH 2/5] perf pmu: Support more complex PMU event aliasing

On Mon, Jun 10, 2019 at 05:59:29PM +0800, John Garry wrote:
> The jevent "Unit" field is used for uncore PMU alias definition.
> 
> The form uncore_pmu_example_X is supported, where "X" is a wildcard,
> to support multiple instances of the same PMU in a system.
> 
> Unfortunately this format not suitable for all uncore PMUs; take the Hisi
> DDRC uncore PMU for example, where the name is in the form
> hisi_scclX_ddrcY.
> 
> For the current jevent parsing, we would be required to hardcode an uncore
> alias translation for each possible value of X. This is not scalable.
> 
> Instead, add support for "Unit" field in the form "hisi_sccl,ddrc", where
> we can match by hisi_scclX and ddrcY. Tokens in Unit field
> are delimited by ','.
> 
> Signed-off-by: John Garry <john.garry@...wei.com>
> ---
>  tools/perf/util/pmu.c | 45 ++++++++++++++++++++++++++++++++++++++-----
>  1 file changed, 40 insertions(+), 5 deletions(-)
> 
> diff --git a/tools/perf/util/pmu.c b/tools/perf/util/pmu.c
> index 036047f56efa..f00cae750086 100644
> --- a/tools/perf/util/pmu.c
> +++ b/tools/perf/util/pmu.c
> @@ -700,6 +700,44 @@ struct pmu_events_map *perf_pmu__find_map(struct perf_pmu *pmu)
>  	return map;
>  }
>  
> +static bool pmu_uncore_alias_match(const char *pmu_name, const char *name)
> +{
> +	/*
> +	 * uncore alias may be from different PMU
> +	 * with common prefix
> +	 */
> +	if (!strncmp(pmu_name, name, strlen(pmu_name)))
> +		return true;
> +
> +	/* match strings with delimiter, ',' */
> +	while (1) {
> +		const char *delimiter;
> +		char token[256] = {};
> +		const char *found_token;
> +		int token_len;
> +
> +		delimiter = strchr(pmu_name, ',');
> +		if (delimiter) {
> +			token_len = delimiter - pmu_name;
> +		} else {
> +			token_len = strlen(pmu_name);
> +		}
> +
> +		memcpy(token, pmu_name, token_len);
> +
> +		found_token = strstr(name, token);
> +		if (!found_token)
> +			return false;
> +
> +		/* No more delimiters, so we must be a match */
> +		if (!delimiter)
> +			return true;
> +
> +		pmu_name += token_len + 1;
> +		name = found_token + token_len;
> +	}

hum, would this be easier with strtok_r?

jirka

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ