1#ifndef __PERF_CPUMAP_H 2#define __PERF_CPUMAP_H 3 4#include <stdio.h> 5#include <stdbool.h> 6 7struct cpu_map { 8 int nr; 9 int map[]; 10}; 11 12struct cpu_map *cpu_map__new(const char *cpu_list); 13struct cpu_map *cpu_map__dummy_new(void); 14void cpu_map__delete(struct cpu_map *map); 15struct cpu_map *cpu_map__read(FILE *file); 16size_t cpu_map__fprintf(struct cpu_map *map, FILE *fp); 17int cpu_map__get_socket(struct cpu_map *map, int idx); 18int cpu_map__get_core(struct cpu_map *map, int idx); 19int cpu_map__build_socket_map(struct cpu_map *cpus, struct cpu_map **sockp); 20int cpu_map__build_core_map(struct cpu_map *cpus, struct cpu_map **corep); 21 22static inline int cpu_map__socket(struct cpu_map *sock, int s) 23{ 24 if (!sock || s > sock->nr || s < 0) 25 return 0; 26 return sock->map[s]; 27} 28 29static inline int cpu_map__id_to_socket(int id) 30{ 31 return id >> 16; 32} 33 34static inline int cpu_map__id_to_cpu(int id) 35{ 36 return id & 0xffff; 37} 38 39static inline int cpu_map__nr(const struct cpu_map *map) 40{ 41 return map ? map->nr : 1; 42} 43 44static inline bool cpu_map__empty(const struct cpu_map *map) 45{ 46 return map ? map->map[0] == -1 : true; 47} 48 49#endif /* __PERF_CPUMAP_H */ 50