perf cpu_map: Add data arg to cpu_map__build_map callback
Adding data arg to cpu_map__build_map callback, so we could pass data along to the callback. It'll be needed in following patches to retrieve topology info from perf.data. Signed-off-by: Jiri Olsa <jolsa@kernel.org> Tested-by: Kan Liang <kan.liang@intel.com> Cc: David Ahern <dsahern@gmail.com> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Link: http://lkml.kernel.org/r/1444992092-17897-41-git-send-email-jolsa@kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
		
							parent
							
								
									f1cbb8f357
								
							
						
					
					
						commit
						1fe7a30028
					
				| @ -944,6 +944,16 @@ static int stat__set_big_num(const struct option *opt __maybe_unused, | ||||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| static int perf_stat__get_socket(struct cpu_map *map, int cpu) | ||||
| { | ||||
| 	return cpu_map__get_socket(map, cpu, NULL); | ||||
| } | ||||
| 
 | ||||
| static int perf_stat__get_core(struct cpu_map *map, int cpu) | ||||
| { | ||||
| 	return cpu_map__get_core(map, cpu, NULL); | ||||
| } | ||||
| 
 | ||||
| static int perf_stat_init_aggr_mode(void) | ||||
| { | ||||
| 	switch (stat_config.aggr_mode) { | ||||
| @ -952,14 +962,14 @@ static int perf_stat_init_aggr_mode(void) | ||||
| 			perror("cannot build socket map"); | ||||
| 			return -1; | ||||
| 		} | ||||
| 		aggr_get_id = cpu_map__get_socket; | ||||
| 		aggr_get_id = perf_stat__get_socket; | ||||
| 		break; | ||||
| 	case AGGR_CORE: | ||||
| 		if (cpu_map__build_core_map(evsel_list->cpus, &aggr_map)) { | ||||
| 			perror("cannot build core map"); | ||||
| 			return -1; | ||||
| 		} | ||||
| 		aggr_get_id = cpu_map__get_core; | ||||
| 		aggr_get_id = perf_stat__get_core; | ||||
| 		break; | ||||
| 	case AGGR_NONE: | ||||
| 	case AGGR_GLOBAL: | ||||
|  | ||||
| @ -73,10 +73,10 @@ static int check_cpu_topology(char *path, struct cpu_map *map) | ||||
| 
 | ||||
| 	for (i = 0; i < map->nr; i++) { | ||||
| 		TEST_ASSERT_VAL("Core ID doesn't match", | ||||
| 			(session->header.env.cpu[map->map[i]].core_id == (cpu_map__get_core(map, i) & 0xffff))); | ||||
| 			(session->header.env.cpu[map->map[i]].core_id == (cpu_map__get_core(map, i, NULL) & 0xffff))); | ||||
| 
 | ||||
| 		TEST_ASSERT_VAL("Socket ID doesn't match", | ||||
| 			(session->header.env.cpu[map->map[i]].socket_id == cpu_map__get_socket(map, i))); | ||||
| 			(session->header.env.cpu[map->map[i]].socket_id == cpu_map__get_socket(map, i, NULL))); | ||||
| 	} | ||||
| 
 | ||||
| 	perf_session__delete(session); | ||||
|  | ||||
| @ -241,7 +241,7 @@ int cpu_map__get_socket_id(int cpu) | ||||
| 	return ret ?: value; | ||||
| } | ||||
| 
 | ||||
| int cpu_map__get_socket(struct cpu_map *map, int idx) | ||||
| int cpu_map__get_socket(struct cpu_map *map, int idx, void *data __maybe_unused) | ||||
| { | ||||
| 	int cpu; | ||||
| 
 | ||||
| @ -259,7 +259,8 @@ static int cmp_ids(const void *a, const void *b) | ||||
| } | ||||
| 
 | ||||
| int cpu_map__build_map(struct cpu_map *cpus, struct cpu_map **res, | ||||
| 		       int (*f)(struct cpu_map *map, int cpu)) | ||||
| 		       int (*f)(struct cpu_map *map, int cpu, void *data), | ||||
| 		       void *data) | ||||
| { | ||||
| 	struct cpu_map *c; | ||||
| 	int nr = cpus->nr; | ||||
| @ -271,7 +272,7 @@ int cpu_map__build_map(struct cpu_map *cpus, struct cpu_map **res, | ||||
| 		return -1; | ||||
| 
 | ||||
| 	for (cpu = 0; cpu < nr; cpu++) { | ||||
| 		s1 = f(cpus, cpu); | ||||
| 		s1 = f(cpus, cpu, data); | ||||
| 		for (s2 = 0; s2 < c->nr; s2++) { | ||||
| 			if (s1 == c->map[s2]) | ||||
| 				break; | ||||
| @ -295,7 +296,7 @@ int cpu_map__get_core_id(int cpu) | ||||
| 	return ret ?: value; | ||||
| } | ||||
| 
 | ||||
| int cpu_map__get_core(struct cpu_map *map, int idx) | ||||
| int cpu_map__get_core(struct cpu_map *map, int idx, void *data) | ||||
| { | ||||
| 	int cpu, s; | ||||
| 
 | ||||
| @ -306,7 +307,7 @@ int cpu_map__get_core(struct cpu_map *map, int idx) | ||||
| 
 | ||||
| 	cpu = cpu_map__get_core_id(cpu); | ||||
| 
 | ||||
| 	s = cpu_map__get_socket(map, idx); | ||||
| 	s = cpu_map__get_socket(map, idx, data); | ||||
| 	if (s == -1) | ||||
| 		return -1; | ||||
| 
 | ||||
| @ -321,12 +322,12 @@ int cpu_map__get_core(struct cpu_map *map, int idx) | ||||
| 
 | ||||
| int cpu_map__build_socket_map(struct cpu_map *cpus, struct cpu_map **sockp) | ||||
| { | ||||
| 	return cpu_map__build_map(cpus, sockp, cpu_map__get_socket); | ||||
| 	return cpu_map__build_map(cpus, sockp, cpu_map__get_socket, NULL); | ||||
| } | ||||
| 
 | ||||
| int cpu_map__build_core_map(struct cpu_map *cpus, struct cpu_map **corep) | ||||
| { | ||||
| 	return cpu_map__build_map(cpus, corep, cpu_map__get_core); | ||||
| 	return cpu_map__build_map(cpus, corep, cpu_map__get_core, NULL); | ||||
| } | ||||
| 
 | ||||
| /* setup simple routines to easily access node numbers given a cpu number */ | ||||
|  | ||||
| @ -19,9 +19,9 @@ struct cpu_map *cpu_map__dummy_new(void); | ||||
| struct cpu_map *cpu_map__read(FILE *file); | ||||
| size_t cpu_map__fprintf(struct cpu_map *map, FILE *fp); | ||||
| int cpu_map__get_socket_id(int cpu); | ||||
| int cpu_map__get_socket(struct cpu_map *map, int idx); | ||||
| int cpu_map__get_socket(struct cpu_map *map, int idx, void *data); | ||||
| int cpu_map__get_core_id(int cpu); | ||||
| int cpu_map__get_core(struct cpu_map *map, int idx); | ||||
| int cpu_map__get_core(struct cpu_map *map, int idx, void *data); | ||||
| int cpu_map__build_socket_map(struct cpu_map *cpus, struct cpu_map **sockp); | ||||
| int cpu_map__build_core_map(struct cpu_map *cpus, struct cpu_map **corep); | ||||
| 
 | ||||
| @ -88,5 +88,6 @@ static inline int cpu__get_node(int cpu) | ||||
| } | ||||
| 
 | ||||
| int cpu_map__build_map(struct cpu_map *cpus, struct cpu_map **res, | ||||
| 		       int (*f)(struct cpu_map *map, int cpu)); | ||||
| 		       int (*f)(struct cpu_map *map, int cpu, void *data), | ||||
| 		       void *data); | ||||
| #endif /* __PERF_CPUMAP_H */ | ||||
|  | ||||
| @ -230,7 +230,7 @@ static int check_per_pkg(struct perf_evsel *counter, | ||||
| 	if (!(vals->run && vals->ena)) | ||||
| 		return 0; | ||||
| 
 | ||||
| 	s = cpu_map__get_socket(cpus, cpu); | ||||
| 	s = cpu_map__get_socket(cpus, cpu, NULL); | ||||
| 	if (s < 0) | ||||
| 		return -1; | ||||
| 
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user