1 #ifndef __PERF_CPUMAP_H 2 #define __PERF_CPUMAP_H 3 4 #include <stdio.h> 5 #include <stdbool.h> 6 7 #include "perf.h" 8 #include "util/debug.h" 9 10 struct cpu_map { 11 int nr; 12 int map[]; 13 }; 14 15 struct cpu_map *cpu_map__new(const char *cpu_list); 16 struct cpu_map *cpu_map__dummy_new(void); 17 void cpu_map__delete(struct cpu_map *map); 18 struct cpu_map *cpu_map__read(FILE *file); 19 size_t cpu_map__fprintf(struct cpu_map *map, FILE *fp); 20 int cpu_map__get_socket(struct cpu_map *map, int idx); 21 int cpu_map__get_core(struct cpu_map *map, int idx); 22 int cpu_map__build_socket_map(struct cpu_map *cpus, struct cpu_map **sockp); 23 int cpu_map__build_core_map(struct cpu_map *cpus, struct cpu_map **corep); 24 25 static inline int cpu_map__socket(struct cpu_map *sock, int s) 26 { 27 if (!sock || s > sock->nr || s < 0) 28 return 0; 29 return sock->map[s]; 30 } 31 32 static inline int cpu_map__id_to_socket(int id) 33 { 34 return id >> 16; 35 } 36 37 static inline int cpu_map__id_to_cpu(int id) 38 { 39 return id & 0xffff; 40 } 41 42 static inline int cpu_map__nr(const struct cpu_map *map) 43 { 44 return map ? map->nr : 1; 45 } 46 47 static inline bool cpu_map__empty(const struct cpu_map *map) 48 { 49 return map ? map->map[0] == -1 : true; 50 } 51 52 int max_cpu_num; 53 int max_node_num; 54 int *cpunode_map; 55 56 int cpu__setup_cpunode_map(void); 57 58 static inline int cpu__max_node(void) 59 { 60 if (unlikely(!max_node_num)) 61 pr_debug("cpu_map not initialized\n"); 62 63 return max_node_num; 64 } 65 66 static inline int cpu__max_cpu(void) 67 { 68 if (unlikely(!max_cpu_num)) 69 pr_debug("cpu_map not initialized\n"); 70 71 return max_cpu_num; 72 } 73 74 static inline int cpu__get_node(int cpu) 75 { 76 if (unlikely(cpunode_map == NULL)) { 77 pr_debug("cpu_map not initialized\n"); 78 return -1; 79 } 80 81 return cpunode_map[cpu]; 82 } 83 84 #endif /* __PERF_CPUMAP_H */ 85