Commit beba77a8 authored by Andi Kleen's avatar Andi Kleen Committed by Greg Kroah-Hartman

perf stat: Fix metrics with --no-merge

[ Upstream commit e3a94273 ]

Since Fixes: 8c5421c0 ("perf pmu: Display pmu name when printing
unmerged events in stat") using --no-merge adds the PMU name to the
evsel name.

This breaks the metric value lookup because the parser doesn't know
about this.

Remove the extra postfixes for the metric evaluation.
Signed-off-by: default avatarAndi Kleen <ak@linux.intel.com>
Acked-by: default avatarJiri Olsa <jolsa@kernel.org>
Cc: Agustin Vega-Frias <agustinv@codeaurora.org>
Cc: Kan Liang <kan.liang@linux.intel.com>
Fixes: 8c5421c0 ("perf pmu: Display pmu name when printing unmerged events in stat")
Link: http://lkml.kernel.org/r/20190624193711.35241-5-andi@firstfloor.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
parent 6f800cb1
...@@ -723,6 +723,7 @@ static void generic_metric(struct perf_stat_config *config, ...@@ -723,6 +723,7 @@ static void generic_metric(struct perf_stat_config *config,
double ratio; double ratio;
int i; int i;
void *ctxp = out->ctx; void *ctxp = out->ctx;
char *n, *pn;
expr__ctx_init(&pctx); expr__ctx_init(&pctx);
expr__add_id(&pctx, name, avg); expr__add_id(&pctx, name, avg);
...@@ -742,7 +743,19 @@ static void generic_metric(struct perf_stat_config *config, ...@@ -742,7 +743,19 @@ static void generic_metric(struct perf_stat_config *config,
stats = &v->stats; stats = &v->stats;
scale = 1.0; scale = 1.0;
} }
expr__add_id(&pctx, metric_events[i]->name, avg_stats(stats)*scale);
n = strdup(metric_events[i]->name);
if (!n)
return;
/*
* This display code with --no-merge adds [cpu] postfixes.
* These are not supported by the parser. Remove everything
* after the space.
*/
pn = strchr(n, ' ');
if (pn)
*pn = 0;
expr__add_id(&pctx, n, avg_stats(stats)*scale);
} }
if (!metric_events[i]) { if (!metric_events[i]) {
const char *p = metric_expr; const char *p = metric_expr;
...@@ -759,6 +772,9 @@ static void generic_metric(struct perf_stat_config *config, ...@@ -759,6 +772,9 @@ static void generic_metric(struct perf_stat_config *config,
(metric_name ? metric_name : name) : "", 0); (metric_name ? metric_name : name) : "", 0);
} else } else
print_metric(config, ctxp, NULL, NULL, "", 0); print_metric(config, ctxp, NULL, NULL, "", 0);
for (i = 1; i < pctx.num_ids; i++)
free((void *)pctx.ids[i].name);
} }
void perf_stat__print_shadow_stats(struct perf_stat_config *config, void perf_stat__print_shadow_stats(struct perf_stat_config *config,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment