1/* SPDX-License-Identifier: GPL-2.0 */ 2#ifndef __PERF_CPUTOPO_H 3#define __PERF_CPUTOPO_H 4 5#include <linux/types.h> 6 7struct 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 37struct numa_topology_node { 38 char *cpus; 39 u32 node; 40 u64 mem_total; 41 u64 mem_free; 42}; 43 44struct numa_topology { 45 u32 nr; 46 struct numa_topology_node nodes[]; 47}; 48 49struct hybrid_topology_node { 50 char *pmu_name; 51 char *cpus; 52}; 53 54struct hybrid_topology { 55 u32 nr; 56 struct hybrid_topology_node nodes[]; 57}; 58 59/* 60 * The topology for online CPUs, lazily created. 61 */ 62const struct cpu_topology *online_topology(void); 63 64struct cpu_topology *cpu_topology__new(void); 65void cpu_topology__delete(struct cpu_topology *tp); 66/* Determine from the core list whether SMT was enabled. */ 67bool cpu_topology__smt_on(const struct cpu_topology *topology); 68/* Are the sets of SMT siblings all enabled or all disabled in user_requested_cpus. */ 69bool cpu_topology__core_wide(const struct cpu_topology *topology, 70 const char *user_requested_cpu_list); 71 72struct numa_topology *numa_topology__new(void); 73void numa_topology__delete(struct numa_topology *tp); 74 75struct hybrid_topology *hybrid_topology__new(void); 76void hybrid_topology__delete(struct hybrid_topology *tp); 77 78#endif /* __PERF_CPUTOPO_H */ 79