diff options
Diffstat (limited to 'tools/perf/util/stat.c')
| -rw-r--r-- | tools/perf/util/stat.c | 47 | 
1 files changed, 24 insertions, 23 deletions
diff --git a/tools/perf/util/stat.c b/tools/perf/util/stat.c index 09ea334586f2..ee6f03481215 100644 --- a/tools/perf/util/stat.c +++ b/tools/perf/util/stat.c @@ -152,11 +152,13 @@ static void evsel__free_stat_priv(struct evsel *evsel)  	zfree(&evsel->stats);  } -static int evsel__alloc_prev_raw_counts(struct evsel *evsel, int ncpus, int nthreads) +static int evsel__alloc_prev_raw_counts(struct evsel *evsel)  { +	int cpu_map_nr = evsel__nr_cpus(evsel); +	int nthreads = perf_thread_map__nr(evsel->core.threads);  	struct perf_counts *counts; -	counts = perf_counts__new(ncpus, nthreads); +	counts = perf_counts__new(cpu_map_nr, nthreads);  	if (counts)  		evsel->prev_raw_counts = counts; @@ -177,12 +179,9 @@ static void evsel__reset_prev_raw_counts(struct evsel *evsel)  static int evsel__alloc_stats(struct evsel *evsel, bool alloc_raw)  { -	int ncpus = evsel__nr_cpus(evsel); -	int nthreads = perf_thread_map__nr(evsel->core.threads); -  	if (evsel__alloc_stat_priv(evsel) < 0 || -	    evsel__alloc_counts(evsel, ncpus, nthreads) < 0 || -	    (alloc_raw && evsel__alloc_prev_raw_counts(evsel, ncpus, nthreads) < 0)) +	    evsel__alloc_counts(evsel) < 0 || +	    (alloc_raw && evsel__alloc_prev_raw_counts(evsel) < 0))  		return -ENOMEM;  	return 0; @@ -293,11 +292,12 @@ static bool pkg_id_equal(const void *__key1, const void *__key2,  	return *key1 == *key2;  } -static int check_per_pkg(struct evsel *counter, -			 struct perf_counts_values *vals, int cpu, bool *skip) +static int check_per_pkg(struct evsel *counter, struct perf_counts_values *vals, +			 int cpu_map_idx, bool *skip)  {  	struct hashmap *mask = counter->per_pkg_mask;  	struct perf_cpu_map *cpus = evsel__cpus(counter); +	struct perf_cpu cpu = perf_cpu_map__cpu(cpus, cpu_map_idx);  	int s, d, ret = 0;  	uint64_t *key; @@ -328,7 +328,7 @@ static int check_per_pkg(struct evsel *counter,  	if (!(vals->run && vals->ena))  		return 0; -	s = cpu_map__get_socket(cpus, cpu, NULL).socket; +	s = cpu__get_socket_id(cpu);  	if (s < 0)  		return -1; @@ -336,7 +336,7 @@ static int check_per_pkg(struct evsel *counter,  	 * On multi-die system, die_id > 0. On no-die system, die_id = 0.  	 * We use hashmap(socket, die) to check the used socket+die pair.  	 */ -	d = cpu_map__get_die(cpus, cpu, NULL).die; +	d = cpu__get_die_id(cpu);  	if (d < 0)  		return -1; @@ -345,9 +345,10 @@ static int check_per_pkg(struct evsel *counter,  		return -ENOMEM;  	*key = (uint64_t)d << 32 | s; -	if (hashmap__find(mask, (void *)key, NULL)) +	if (hashmap__find(mask, (void *)key, NULL)) {  		*skip = true; -	else +		free(key); +	} else  		ret = hashmap__add(mask, (void *)key, (void *)1);  	return ret; @@ -355,14 +356,14 @@ static int check_per_pkg(struct evsel *counter,  static int  process_counter_values(struct perf_stat_config *config, struct evsel *evsel, -		       int cpu, int thread, +		       int cpu_map_idx, int thread,  		       struct perf_counts_values *count)  {  	struct perf_counts_values *aggr = &evsel->counts->aggr;  	static struct perf_counts_values zero;  	bool skip = false; -	if (check_per_pkg(evsel, count, cpu, &skip)) { +	if (check_per_pkg(evsel, count, cpu_map_idx, &skip)) {  		pr_err("failed to read per-pkg counter\n");  		return -1;  	} @@ -378,11 +379,11 @@ process_counter_values(struct perf_stat_config *config, struct evsel *evsel,  	case AGGR_NODE:  	case AGGR_NONE:  		if (!evsel->snapshot) -			evsel__compute_deltas(evsel, cpu, thread, count); +			evsel__compute_deltas(evsel, cpu_map_idx, thread, count);  		perf_counts_values__scale(count, config->scale, NULL);  		if ((config->aggr_mode == AGGR_NONE) && (!evsel->percore)) {  			perf_stat__update_shadow_stats(evsel, count->val, -						       cpu, &rt_stat); +						       cpu_map_idx, &rt_stat);  		}  		if (config->aggr_mode == AGGR_THREAD) { @@ -411,15 +412,15 @@ static int process_counter_maps(struct perf_stat_config *config,  {  	int nthreads = perf_thread_map__nr(counter->core.threads);  	int ncpus = evsel__nr_cpus(counter); -	int cpu, thread; +	int idx, thread;  	if (counter->core.system_wide)  		nthreads = 1;  	for (thread = 0; thread < nthreads; thread++) { -		for (cpu = 0; cpu < ncpus; cpu++) { -			if (process_counter_values(config, counter, cpu, thread, -						   perf_counts(counter->counts, cpu, thread))) +		for (idx = 0; idx < ncpus; idx++) { +			if (process_counter_values(config, counter, idx, thread, +						   perf_counts(counter->counts, idx, thread)))  				return -1;  		}  	} @@ -531,7 +532,7 @@ size_t perf_event__fprintf_stat_config(union perf_event *event, FILE *fp)  int create_perf_stat_counter(struct evsel *evsel,  			     struct perf_stat_config *config,  			     struct target *target, -			     int cpu) +			     int cpu_map_idx)  {  	struct perf_event_attr *attr = &evsel->core.attr;  	struct evsel *leader = evsel__leader(evsel); @@ -585,7 +586,7 @@ int create_perf_stat_counter(struct evsel *evsel,  	}  	if (target__has_cpu(target) && !target__has_per_thread(target)) -		return evsel__open_per_cpu(evsel, evsel__cpus(evsel), cpu); +		return evsel__open_per_cpu(evsel, evsel__cpus(evsel), cpu_map_idx);  	return evsel__open_per_thread(evsel, evsel->core.threads);  }  |