Re: [PATCH v2 25/48] perf stat-display: Avoid use of core for CPU.
From: Namhyung Kim <namhyung@kernel.org>
Date: 2021-12-29 00:09:59
Also in:
linux-arm-kernel, lkml
On Wed, Dec 22, 2021 at 11:47 PM Ian Rogers [off-list ref] wrote:
Correct use of cpumap index in print_no_aggr_metric. Signed-off-by: Ian Rogers <irogers@google.com> ---
[SNIP]
quoted hunk ↗ jump to hunk
@@ -924,29 +921,32 @@ static void print_no_aggr_metric(struct perf_stat_config *config, struct evlist *evlist, char *prefix) { - int cpu; - int nrcpus = 0; - struct evsel *counter; - u64 ena, run, val; - double uval; - struct aggr_cpu_id id; + int cpu, nrcpus; nrcpus = evlist->core.cpus->nr; for (cpu = 0; cpu < nrcpus; cpu++) { + struct evsel *counter; bool first = true; if (prefix) fputs(prefix, config->output); evlist__for_each_entry(evlist, counter) { - id = aggr_cpu_id__empty(); - id.core = cpu; + u64 ena, run, val; + double uval; + struct aggr_cpu_id id; + int idx = perf_cpu_map__idx(evsel__cpus(counter), cpu);
Not sure about this. Here the 'cpu' is an index for the evlist->core.cpus, not a CPU number. But the perf_cpu_map__idx() requires a CPU number, right? Thanks, Namhyung
+
+ if (idx < 0)
+ continue;
+
+ id = aggr_cpu_id__cpu(cpu, /*data=*/NULL);
if (first) {
aggr_printout(config, counter, id, 0);
first = false;
}
- val = perf_counts(counter->counts, cpu, 0)->val;
- ena = perf_counts(counter->counts, cpu, 0)->ena;
- run = perf_counts(counter->counts, cpu, 0)->run;
+ val = perf_counts(counter->counts, idx, 0)->val;
+ ena = perf_counts(counter->counts, idx, 0)->ena;
+ run = perf_counts(counter->counts, idx, 0)->run;
uval = val * counter->scale;
printout(config, id, 0, counter, uval, prefix,
--
2.34.1.307.g9b7440fafd-goog