83 lines
2.7 KiB
Diff
83 lines
2.7 KiB
Diff
From 7dfd2106230977845705617a25773803c1ce2e5a Mon Sep 17 00:00:00 2001
|
|
From: Andi Kleen <ak@linux.intel.com>
|
|
Date: Mon, 24 Jun 2019 12:37:11 -0700
|
|
Subject: [PATCH 014/201] perf stat: Fix metrics with --no-merge
|
|
|
|
mainline inclusion
|
|
from mainline-v5.3-rc1
|
|
commit e3a9427323a53ceee540276a74af7706f350d052
|
|
category: feature
|
|
bugzilla: e3a9427323a53ceee540276a74af7706f350d052
|
|
|
|
Reference: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=e3a9427323a53ceee540276a74af7706f350d052
|
|
|
|
----------------------------------------------------------------------
|
|
|
|
Since Fixes: 8c5421c016a4 ("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: Andi Kleen <ak@linux.intel.com>
|
|
Acked-by: Jiri Olsa <jolsa@kernel.org>
|
|
Cc: Agustin Vega-Frias <agustinv@codeaurora.org>
|
|
Cc: Kan Liang <kan.liang@linux.intel.com>
|
|
Fixes: 8c5421c016a4 ("perf pmu: Display pmu name when printing unmerged events in stat")
|
|
Link: http://lkml.kernel.org/r/20190624193711.35241-5-andi@firstfloor.org
|
|
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
|
|
Signed-off-by: hongrongxuan <hongrongxuan@huawei.com>
|
|
---
|
|
tools/perf/util/stat-shadow.c | 18 +++++++++++++++++-
|
|
1 file changed, 17 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/tools/perf/util/stat-shadow.c b/tools/perf/util/stat-shadow.c
|
|
index 93c075ddc717..77982aae7aaf 100644
|
|
--- a/tools/perf/util/stat-shadow.c
|
|
+++ b/tools/perf/util/stat-shadow.c
|
|
@@ -723,6 +723,7 @@ static void generic_metric(struct perf_stat_config *config,
|
|
double ratio;
|
|
int i;
|
|
void *ctxp = out->ctx;
|
|
+ char *n, *pn;
|
|
|
|
expr__ctx_init(&pctx);
|
|
expr__add_id(&pctx, name, avg);
|
|
@@ -742,7 +743,19 @@ static void generic_metric(struct perf_stat_config *config,
|
|
stats = &v->stats;
|
|
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]) {
|
|
const char *p = metric_expr;
|
|
@@ -759,6 +772,9 @@ static void generic_metric(struct perf_stat_config *config,
|
|
(metric_name ? metric_name : name) : "", 0);
|
|
} else
|
|
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,
|
|
--
|
|
2.27.0
|
|
|