| /* SPDX-License-Identifier: GPL-2.0 */ | |
| #ifndef __PERF_CPUTOPO_H | |
| #define __PERF_CPUTOPO_H | |
| #include <linux/types.h> | |
| struct cpu_topology { | |
| /* The number of unique package_cpus_lists below. */ | |
| u32 package_cpus_lists; | |
| /* The number of unique die_cpu_lists below. */ | |
| u32 die_cpus_lists; | |
| /* The number of unique core_cpu_lists below. */ | |
| u32 core_cpus_lists; | |
| /* | |
| * An array of strings where each string is unique and read from | |
| * /sys/devices/system/cpu/cpuX/topology/package_cpus_list. From the ABI | |
| * each of these is a human-readable list of CPUs sharing the same | |
| * physical_package_id. The format is like 0-3, 8-11, 14,17. | |
| */ | |
| const char **package_cpus_list; | |
| /* | |
| * An array of string where each string is unique and from | |
| * /sys/devices/system/cpu/cpuX/topology/die_cpus_list. From the ABI | |
| * each of these is a human-readable list of CPUs within the same die. | |
| * The format is like 0-3, 8-11, 14,17. | |
| */ | |
| const char **die_cpus_list; | |
| /* | |
| * An array of string where each string is unique and from | |
| * /sys/devices/system/cpu/cpuX/topology/core_cpus_list. From the ABI | |
| * each of these is a human-readable list of CPUs within the same | |
| * core. The format is like 0-3, 8-11, 14,17. | |
| */ | |
| const char **core_cpus_list; | |
| }; | |
| struct numa_topology_node { | |
| char *cpus; | |
| u32 node; | |
| u64 mem_total; | |
| u64 mem_free; | |
| }; | |
| struct numa_topology { | |
| u32 nr; | |
| struct numa_topology_node nodes[]; | |
| }; | |
| struct hybrid_topology_node { | |
| char *pmu_name; | |
| char *cpus; | |
| }; | |
| struct hybrid_topology { | |
| u32 nr; | |
| struct hybrid_topology_node nodes[]; | |
| }; | |
| /* | |
| * The topology for online CPUs, lazily created. | |
| */ | |
| const struct cpu_topology *online_topology(void); | |
| struct cpu_topology *cpu_topology__new(void); | |
| void cpu_topology__delete(struct cpu_topology *tp); | |
| /* Determine from the core list whether SMT was enabled. */ | |
| bool cpu_topology__smt_on(const struct cpu_topology *topology); | |
| /* Are the sets of SMT siblings all enabled or all disabled in user_requested_cpus. */ | |
| bool cpu_topology__core_wide(const struct cpu_topology *topology, | |
| const char *user_requested_cpu_list); | |
| struct numa_topology *numa_topology__new(void); | |
| void numa_topology__delete(struct numa_topology *tp); | |
| struct hybrid_topology *hybrid_topology__new(void); | |
| void hybrid_topology__delete(struct hybrid_topology *tp); | |
| #endif /* __PERF_CPUTOPO_H */ |