1 /* SPDX-License-Identifier: GPL-2.0 */ 2 #ifndef __PERF_CPUTOPO_H 3 #define __PERF_CPUTOPO_H 4 5 #include <linux/types.h> 6 7 struct cpu_topology { 8 /* The number of unique package_cpus_lists below. */ 9 u32 package_cpus_lists; 10 /* The number of unique die_cpu_lists below. */ 11 u32 die_cpus_lists; 12 /* The number of unique core_cpu_lists below. */ 13 u32 core_cpus_lists; 14 /* 15 * An array of strings where each string is unique and read from 16 * /sys/devices/system/cpu/cpuX/topology/package_cpus_list. From the ABI 17 * each of these is a human-readable list of CPUs sharing the same 18 * physical_package_id. The format is like 0-3, 8-11, 14,17. 19 */ 20 const char **package_cpus_list; 21 /* 22 * An array of string where each string is unique and from 23 * /sys/devices/system/cpu/cpuX/topology/die_cpus_list. From the ABI 24 * each of these is a human-readable list of CPUs within the same die. 25 * The format is like 0-3, 8-11, 14,17. 26 */ 27 const char **die_cpus_list; 28 /* 29 * An array of string where each string is unique and from 30 * /sys/devices/system/cpu/cpuX/topology/core_cpus_list. From the ABI 31 * each of these is a human-readable list of CPUs within the same 32 * core. The format is like 0-3, 8-11, 14,17. 33 */ 34 const char **core_cpus_list; 35 }; 36 37 struct numa_topology_node { 38 char *cpus; 39 u32 node; 40 u64 mem_total; 41 u64 mem_free; 42 }; 43 44 struct numa_topology { 45 u32 nr; 46 struct numa_topology_node nodes[]; 47 }; 48 49 struct hybrid_topology_node { 50 char *pmu_name; 51 char *cpus; 52 }; 53 54 struct hybrid_topology { 55 u32 nr; 56 struct hybrid_topology_node nodes[]; 57 }; 58 59 struct cpu_topology *cpu_topology__new(void); 60 void cpu_topology__delete(struct cpu_topology *tp); 61 62 struct numa_topology *numa_topology__new(void); 63 void numa_topology__delete(struct numa_topology *tp); 64 65 struct hybrid_topology *hybrid_topology__new(void); 66 void hybrid_topology__delete(struct hybrid_topology *tp); 67 68 #endif /* __PERF_CPUTOPO_H */ 69