Merge tag 'block-6.1-2022-10-20' of git://git.kernel.dk/linux
[linux-block.git] / tools / perf / util / cputopo.h
CommitLineData
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
7struct 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
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;
6549a8c0 46 struct numa_topology_node nodes[];
48e6c5ac
JO
47};
48
f7d74ce3
JY
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
5135d5ef
JO
59struct cpu_topology *cpu_topology__new(void);
60void cpu_topology__delete(struct cpu_topology *tp);
09b73fe9
IR
61/* Determine from the core list whether SMT was enabled. */
62bool 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. */
64bool cpu_topology__core_wide(const struct cpu_topology *topology,
65 const char *user_requested_cpu_list);
5135d5ef 66
48e6c5ac
JO
67struct numa_topology *numa_topology__new(void);
68void numa_topology__delete(struct numa_topology *tp);
69
f7d74ce3
JY
70struct hybrid_topology *hybrid_topology__new(void);
71void hybrid_topology__delete(struct hybrid_topology *tp);
72
5135d5ef 73#endif /* __PERF_CPUTOPO_H */