perf stat: Correct variable name for read counter
Switch from cpu to cpu_map_idx to reduce confusion. Signed-off-by: Ian Rogers <irogers@google.com> Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com> Cc: Andi Kleen <ak@linux.intel.com> Cc: Ingo Molnar <mingo@redhat.com> Cc: James Clark <james.clark@arm.com> Cc: Jiri Olsa <jolsa@redhat.com> Cc: John Garry <john.garry@huawei.com> Cc: Kajol Jain <kjain@linux.ibm.com> Cc: Kan Liang <kan.liang@linux.intel.com> Cc: Leo Yan <leo.yan@linaro.org> Cc: Mark Rutland <mark.rutland@arm.com> Cc: Mathieu Poirier <mathieu.poirier@linaro.org> Cc: Mike Leach <mike.leach@linaro.org> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Paul Clarke <pc@us.ibm.com> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Riccardo Mancini <rickyman7@gmail.com> Cc: Stephane Eranian <eranian@google.com> Cc: Suzuki Poulouse <suzuki.poulose@arm.com> Cc: Vineet Singh <vineet.singh@intel.com> Cc: coresight@lists.linaro.org Cc: linux-arm-kernel@lists.infradead.org Cc: zhengjun.xing@intel.com Link: https://lore.kernel.org/r/20220105061351.120843-37-irogers@google.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
Родитель
7ac0089d13
Коммит
da8c94c065
|
@ -337,25 +337,25 @@ static int evsel__write_stat_event(struct evsel *counter, int cpu_map_idx, u32 t
|
|||
process_synthesized_event, NULL);
|
||||
}
|
||||
|
||||
static int read_single_counter(struct evsel *counter, int cpu,
|
||||
static int read_single_counter(struct evsel *counter, int cpu_map_idx,
|
||||
int thread, struct timespec *rs)
|
||||
{
|
||||
if (counter->tool_event == PERF_TOOL_DURATION_TIME) {
|
||||
u64 val = rs->tv_nsec + rs->tv_sec*1000000000ULL;
|
||||
struct perf_counts_values *count =
|
||||
perf_counts(counter->counts, cpu, thread);
|
||||
perf_counts(counter->counts, cpu_map_idx, thread);
|
||||
count->ena = count->run = val;
|
||||
count->val = val;
|
||||
return 0;
|
||||
}
|
||||
return evsel__read_counter(counter, cpu, thread);
|
||||
return evsel__read_counter(counter, cpu_map_idx, thread);
|
||||
}
|
||||
|
||||
/*
|
||||
* Read out the results of a single counter:
|
||||
* do not aggregate counts across CPUs in system-wide mode
|
||||
*/
|
||||
static int read_counter_cpu(struct evsel *counter, struct timespec *rs, int cpu)
|
||||
static int read_counter_cpu(struct evsel *counter, struct timespec *rs, int cpu_map_idx)
|
||||
{
|
||||
int nthreads = perf_thread_map__nr(evsel_list->core.threads);
|
||||
int thread;
|
||||
|
@ -369,24 +369,24 @@ static int read_counter_cpu(struct evsel *counter, struct timespec *rs, int cpu)
|
|||
for (thread = 0; thread < nthreads; thread++) {
|
||||
struct perf_counts_values *count;
|
||||
|
||||
count = perf_counts(counter->counts, cpu, thread);
|
||||
count = perf_counts(counter->counts, cpu_map_idx, thread);
|
||||
|
||||
/*
|
||||
* The leader's group read loads data into its group members
|
||||
* (via evsel__read_counter()) and sets their count->loaded.
|
||||
*/
|
||||
if (!perf_counts__is_loaded(counter->counts, cpu, thread) &&
|
||||
read_single_counter(counter, cpu, thread, rs)) {
|
||||
if (!perf_counts__is_loaded(counter->counts, cpu_map_idx, thread) &&
|
||||
read_single_counter(counter, cpu_map_idx, thread, rs)) {
|
||||
counter->counts->scaled = -1;
|
||||
perf_counts(counter->counts, cpu, thread)->ena = 0;
|
||||
perf_counts(counter->counts, cpu, thread)->run = 0;
|
||||
perf_counts(counter->counts, cpu_map_idx, thread)->ena = 0;
|
||||
perf_counts(counter->counts, cpu_map_idx, thread)->run = 0;
|
||||
return -1;
|
||||
}
|
||||
|
||||
perf_counts__set_loaded(counter->counts, cpu, thread, false);
|
||||
perf_counts__set_loaded(counter->counts, cpu_map_idx, thread, false);
|
||||
|
||||
if (STAT_RECORD) {
|
||||
if (evsel__write_stat_event(counter, cpu, thread, count)) {
|
||||
if (evsel__write_stat_event(counter, cpu_map_idx, thread, count)) {
|
||||
pr_err("failed to write stat event\n");
|
||||
return -1;
|
||||
}
|
||||
|
@ -396,7 +396,7 @@ static int read_counter_cpu(struct evsel *counter, struct timespec *rs, int cpu)
|
|||
fprintf(stat_config.output,
|
||||
"%s: %d: %" PRIu64 " %" PRIu64 " %" PRIu64 "\n",
|
||||
evsel__name(counter),
|
||||
cpu,
|
||||
perf_cpu_map__cpu(evsel__cpus(counter), cpu_map_idx),
|
||||
count->val, count->ena, count->run);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1476,11 +1476,11 @@ void evsel__compute_deltas(struct evsel *evsel, int cpu, int thread,
|
|||
count->run = count->run - tmp.run;
|
||||
}
|
||||
|
||||
static int evsel__read_one(struct evsel *evsel, int cpu, int thread)
|
||||
static int evsel__read_one(struct evsel *evsel, int cpu_map_idx, int thread)
|
||||
{
|
||||
struct perf_counts_values *count = perf_counts(evsel->counts, cpu, thread);
|
||||
struct perf_counts_values *count = perf_counts(evsel->counts, cpu_map_idx, thread);
|
||||
|
||||
return perf_evsel__read(&evsel->core, cpu, thread, count);
|
||||
return perf_evsel__read(&evsel->core, cpu_map_idx, thread, count);
|
||||
}
|
||||
|
||||
static void evsel__set_count(struct evsel *counter, int cpu, int thread, u64 val, u64 ena, u64 run)
|
||||
|
@ -1530,7 +1530,7 @@ static int evsel__process_group_data(struct evsel *leader, int cpu, int thread,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int evsel__read_group(struct evsel *leader, int cpu, int thread)
|
||||
static int evsel__read_group(struct evsel *leader, int cpu_map_idx, int thread)
|
||||
{
|
||||
struct perf_stat_evsel *ps = leader->stats;
|
||||
u64 read_format = leader->core.attr.read_format;
|
||||
|
@ -1551,42 +1551,42 @@ static int evsel__read_group(struct evsel *leader, int cpu, int thread)
|
|||
ps->group_data = data;
|
||||
}
|
||||
|
||||
if (FD(leader, cpu, thread) < 0)
|
||||
if (FD(leader, cpu_map_idx, thread) < 0)
|
||||
return -EINVAL;
|
||||
|
||||
if (readn(FD(leader, cpu, thread), data, size) <= 0)
|
||||
if (readn(FD(leader, cpu_map_idx, thread), data, size) <= 0)
|
||||
return -errno;
|
||||
|
||||
return evsel__process_group_data(leader, cpu, thread, data);
|
||||
return evsel__process_group_data(leader, cpu_map_idx, thread, data);
|
||||
}
|
||||
|
||||
int evsel__read_counter(struct evsel *evsel, int cpu, int thread)
|
||||
int evsel__read_counter(struct evsel *evsel, int cpu_map_idx, int thread)
|
||||
{
|
||||
u64 read_format = evsel->core.attr.read_format;
|
||||
|
||||
if (read_format & PERF_FORMAT_GROUP)
|
||||
return evsel__read_group(evsel, cpu, thread);
|
||||
return evsel__read_group(evsel, cpu_map_idx, thread);
|
||||
|
||||
return evsel__read_one(evsel, cpu, thread);
|
||||
return evsel__read_one(evsel, cpu_map_idx, thread);
|
||||
}
|
||||
|
||||
int __evsel__read_on_cpu(struct evsel *evsel, int cpu, int thread, bool scale)
|
||||
int __evsel__read_on_cpu(struct evsel *evsel, int cpu_map_idx, int thread, bool scale)
|
||||
{
|
||||
struct perf_counts_values count;
|
||||
size_t nv = scale ? 3 : 1;
|
||||
|
||||
if (FD(evsel, cpu, thread) < 0)
|
||||
if (FD(evsel, cpu_map_idx, thread) < 0)
|
||||
return -EINVAL;
|
||||
|
||||
if (evsel->counts == NULL && evsel__alloc_counts(evsel) < 0)
|
||||
return -ENOMEM;
|
||||
|
||||
if (readn(FD(evsel, cpu, thread), &count, nv * sizeof(u64)) <= 0)
|
||||
if (readn(FD(evsel, cpu_map_idx, thread), &count, nv * sizeof(u64)) <= 0)
|
||||
return -errno;
|
||||
|
||||
evsel__compute_deltas(evsel, cpu, thread, &count);
|
||||
evsel__compute_deltas(evsel, cpu_map_idx, thread, &count);
|
||||
perf_counts_values__scale(&count, scale, NULL);
|
||||
*perf_counts(evsel->counts, cpu, thread) = count;
|
||||
*perf_counts(evsel->counts, cpu_map_idx, thread) = count;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -333,32 +333,32 @@ static inline bool evsel__match2(struct evsel *e1, struct evsel *e2)
|
|||
(e1->core.attr.config == e2->core.attr.config);
|
||||
}
|
||||
|
||||
int evsel__read_counter(struct evsel *evsel, int cpu, int thread);
|
||||
int evsel__read_counter(struct evsel *evsel, int cpu_map_idx, int thread);
|
||||
|
||||
int __evsel__read_on_cpu(struct evsel *evsel, int cpu, int thread, bool scale);
|
||||
int __evsel__read_on_cpu(struct evsel *evsel, int cpu_map_idx, int thread, bool scale);
|
||||
|
||||
/**
|
||||
* evsel__read_on_cpu - Read out the results on a CPU and thread
|
||||
*
|
||||
* @evsel - event selector to read value
|
||||
* @cpu - CPU of interest
|
||||
* @cpu_map_idx - CPU of interest
|
||||
* @thread - thread of interest
|
||||
*/
|
||||
static inline int evsel__read_on_cpu(struct evsel *evsel, int cpu, int thread)
|
||||
static inline int evsel__read_on_cpu(struct evsel *evsel, int cpu_map_idx, int thread)
|
||||
{
|
||||
return __evsel__read_on_cpu(evsel, cpu, thread, false);
|
||||
return __evsel__read_on_cpu(evsel, cpu_map_idx, thread, false);
|
||||
}
|
||||
|
||||
/**
|
||||
* evsel__read_on_cpu_scaled - Read out the results on a CPU and thread, scaled
|
||||
*
|
||||
* @evsel - event selector to read value
|
||||
* @cpu - CPU of interest
|
||||
* @cpu_map_idx - CPU of interest
|
||||
* @thread - thread of interest
|
||||
*/
|
||||
static inline int evsel__read_on_cpu_scaled(struct evsel *evsel, int cpu, int thread)
|
||||
static inline int evsel__read_on_cpu_scaled(struct evsel *evsel, int cpu_map_idx, int thread)
|
||||
{
|
||||
return __evsel__read_on_cpu(evsel, cpu, thread, true);
|
||||
return __evsel__read_on_cpu(evsel, cpu_map_idx, thread, true);
|
||||
}
|
||||
|
||||
int evsel__parse_sample(struct evsel *evsel, union perf_event *event,
|
||||
|
|
Загрузка…
Ссылка в новой задаче