Commit | Line | Data |
---|---|---|
5135d5ef JO |
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 { | |
48f07b0b IR |
8 | /* The number of unique package_cpus_lists below. */ |
9 | u32 package_cpus_lists; | |
406018dc IR |
10 | /* The number of unique die_cpu_lists below. */ |
11 | u32 die_cpus_lists; | |
0b6b84cc IR |
12 | /* The number of unique core_cpu_lists below. */ |
13 | u32 core_cpus_lists; | |
48f07b0b IR |
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; | |
406018dc IR |
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; | |
0b6b84cc IR |
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; | |
5135d5ef JO |
35 | }; |
36 | ||
48e6c5ac JO |
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; | |
6549a8c0 | 46 | struct numa_topology_node nodes[]; |
48e6c5ac JO |
47 | }; |
48 | ||
f7d74ce3 JY |
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 | ||
5135d5ef JO |
59 | struct cpu_topology *cpu_topology__new(void); |
60 | void cpu_topology__delete(struct cpu_topology *tp); | |
09b73fe9 IR |
61 | /* Determine from the core list whether SMT was enabled. */ |
62 | bool cpu_topology__smt_on(const struct cpu_topology *topology); | |
cc2c4e26 IR |
63 | /* Are the sets of SMT siblings all enabled or all disabled in user_requested_cpus. */ |
64 | bool cpu_topology__core_wide(const struct cpu_topology *topology, | |
65 | const char *user_requested_cpu_list); | |
5135d5ef | 66 | |
48e6c5ac JO |
67 | struct numa_topology *numa_topology__new(void); |
68 | void numa_topology__delete(struct numa_topology *tp); | |
69 | ||
f7d74ce3 JY |
70 | struct hybrid_topology *hybrid_topology__new(void); |
71 | void hybrid_topology__delete(struct hybrid_topology *tp); | |
72 | ||
5135d5ef | 73 | #endif /* __PERF_CPUTOPO_H */ |