1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */ 2a12b51c4SPaul Mackerras #ifndef __PERF_CPUMAP_H 3a12b51c4SPaul Mackerras #define __PERF_CPUMAP_H 4a12b51c4SPaul Mackerras 59ae7d335SArnaldo Carvalho de Melo #include <stdio.h> 6a14bb7a6SArnaldo Carvalho de Melo #include <stdbool.h> 7959b83c7SJiri Olsa #include <internal/cpumap.h> 8397721e0SJiri Olsa #include <perf/cpumap.h> 99ae7d335SArnaldo Carvalho de Melo 10fa265e59SJames Clark struct aggr_cpu_id { 11*8d4852b4SJames Clark int thread; 12fcd83a35SJames Clark int node; 131a270cb6SJames Clark int socket; 14ba2ee166SJames Clark int die; 15b9933817SJames Clark int core; 16fa265e59SJames Clark }; 17fa265e59SJames Clark 18cea6575fSJames Clark struct cpu_aggr_map { 19cea6575fSJames Clark refcount_t refcnt; 20cea6575fSJames Clark int nr; 21ff523295SJames Clark struct aggr_cpu_id map[]; 22cea6575fSJames Clark }; 23cea6575fSJames Clark 2472932371SJiri Olsa struct perf_record_cpu_map_data; 257780c25bSDon Zickus 26315c0a1fSJiri Olsa struct perf_cpu_map *perf_cpu_map__empty_new(int nr); 27cea6575fSJames Clark struct cpu_aggr_map *cpu_aggr_map__empty_new(int nr); 28cea6575fSJames Clark 2972932371SJiri Olsa struct perf_cpu_map *cpu_map__new_data(struct perf_record_cpu_map_data *data); 30f854839bSJiri Olsa size_t cpu_map__snprint(struct perf_cpu_map *map, char *buf, size_t size); 31f854839bSJiri Olsa size_t cpu_map__snprint_mask(struct perf_cpu_map *map, char *buf, size_t size); 32f854839bSJiri Olsa size_t cpu_map__fprintf(struct perf_cpu_map *map, FILE *fp); 33193b6bd3SKan Liang int cpu_map__get_socket_id(int cpu); 342760f5a1SJames Clark struct aggr_cpu_id cpu_map__get_socket(struct perf_cpu_map *map, int idx, void *data); 35b74d8686SKan Liang int cpu_map__get_die_id(int cpu); 362760f5a1SJames Clark struct aggr_cpu_id cpu_map__get_die(struct perf_cpu_map *map, int idx, void *data); 37193b6bd3SKan Liang int cpu_map__get_core_id(int cpu); 382760f5a1SJames Clark struct aggr_cpu_id cpu_map__get_core(struct perf_cpu_map *map, int idx, void *data); 3986895b48SJiri Olsa int cpu_map__get_node_id(int cpu); 402760f5a1SJames Clark struct aggr_cpu_id cpu_map__get_node(struct perf_cpu_map *map, int idx, void *data); 41d526e1a0SJames Clark int cpu_map__build_socket_map(struct perf_cpu_map *cpus, struct cpu_aggr_map **sockp); 42d526e1a0SJames Clark int cpu_map__build_die_map(struct perf_cpu_map *cpus, struct cpu_aggr_map **diep); 43d526e1a0SJames Clark int cpu_map__build_core_map(struct perf_cpu_map *cpus, struct cpu_aggr_map **corep); 44d526e1a0SJames Clark int cpu_map__build_node_map(struct perf_cpu_map *cpus, struct cpu_aggr_map **nodep); 45f854839bSJiri Olsa const struct perf_cpu_map *cpu_map__online(void); /* thread unsafe */ 465ac59a8aSStephane Eranian 47f854839bSJiri Olsa static inline int cpu_map__socket(struct perf_cpu_map *sock, int s) 485ac59a8aSStephane Eranian { 495ac59a8aSStephane Eranian if (!sock || s > sock->nr || s < 0) 505ac59a8aSStephane Eranian return 0; 515ac59a8aSStephane Eranian return sock->map[s]; 525ac59a8aSStephane Eranian } 539ae7d335SArnaldo Carvalho de Melo 547780c25bSDon Zickus int cpu__setup_cpunode_map(void); 557780c25bSDon Zickus 565ac76283SArnaldo Carvalho de Melo int cpu__max_node(void); 575ac76283SArnaldo Carvalho de Melo int cpu__max_cpu(void); 5892a7e127SJan Stancek int cpu__max_present_cpu(void); 595ac76283SArnaldo Carvalho de Melo int cpu__get_node(int cpu); 607780c25bSDon Zickus 61d526e1a0SJames Clark int cpu_map__build_map(struct perf_cpu_map *cpus, struct cpu_aggr_map **res, 622760f5a1SJames Clark struct aggr_cpu_id (*f)(struct perf_cpu_map *map, int cpu, void *data), 631fe7a300SJiri Olsa void *data); 64e632aa69SJiri Olsa 65f854839bSJiri Olsa int cpu_map__cpu(struct perf_cpu_map *cpus, int idx); 66f854839bSJiri Olsa bool cpu_map__has(struct perf_cpu_map *cpus, int cpu); 67a8cbe40fSAndi Kleen 68fa265e59SJames Clark bool cpu_map__compare_aggr_cpu_id(struct aggr_cpu_id a, struct aggr_cpu_id b); 69fa265e59SJames Clark bool cpu_map__aggr_cpu_id_is_empty(struct aggr_cpu_id a); 70fa265e59SJames Clark struct aggr_cpu_id cpu_map__empty_aggr_cpu_id(void); 71fa265e59SJames Clark 72a12b51c4SPaul Mackerras #endif /* __PERF_CPUMAP_H */ 73