Merge tag 'linux-kselftest-next-6.6-rc2' of git://git.kernel.org/pub/scm/linux/kernel...
[platform/kernel/linux-starfive.git] / tools / perf / util / env.h
1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef __PERF_ENV_H
3 #define __PERF_ENV_H
4
5 #include <linux/types.h>
6 #include <linux/rbtree.h>
7 #include "cpumap.h"
8 #include "rwsem.h"
9
10 struct perf_cpu_map;
11
12 struct cpu_topology_map {
13         int     socket_id;
14         int     die_id;
15         int     core_id;
16 };
17
18 struct cpu_cache_level {
19         u32     level;
20         u32     line_size;
21         u32     sets;
22         u32     ways;
23         char    *type;
24         char    *size;
25         char    *map;
26 };
27
28 struct numa_node {
29         u32              node;
30         u64              mem_total;
31         u64              mem_free;
32         struct perf_cpu_map     *map;
33 };
34
35 struct memory_node {
36         u64              node;
37         u64              size;
38         unsigned long   *set;
39 };
40
41 struct hybrid_node {
42         char    *pmu_name;
43         char    *cpus;
44 };
45
46 struct pmu_caps {
47         int             nr_caps;
48         unsigned int    max_branches;
49         char            **caps;
50         char            *pmu_name;
51 };
52
53 struct perf_env {
54         char                    *hostname;
55         char                    *os_release;
56         char                    *version;
57         char                    *arch;
58         int                     nr_cpus_online;
59         int                     nr_cpus_avail;
60         char                    *cpu_desc;
61         char                    *cpuid;
62         unsigned long long      total_mem;
63         unsigned int            msr_pmu_type;
64         unsigned int            max_branches;
65         int                     kernel_is_64_bit;
66
67         int                     nr_cmdline;
68         int                     nr_sibling_cores;
69         int                     nr_sibling_dies;
70         int                     nr_sibling_threads;
71         int                     nr_numa_nodes;
72         int                     nr_memory_nodes;
73         int                     nr_pmu_mappings;
74         int                     nr_groups;
75         int                     nr_cpu_pmu_caps;
76         int                     nr_hybrid_nodes;
77         int                     nr_pmus_with_caps;
78         char                    *cmdline;
79         const char              **cmdline_argv;
80         char                    *sibling_cores;
81         char                    *sibling_dies;
82         char                    *sibling_threads;
83         char                    *pmu_mappings;
84         char                    **cpu_pmu_caps;
85         struct cpu_topology_map *cpu;
86         struct cpu_cache_level  *caches;
87         int                      caches_cnt;
88         u32                     comp_ratio;
89         u32                     comp_ver;
90         u32                     comp_type;
91         u32                     comp_level;
92         u32                     comp_mmap_len;
93         struct numa_node        *numa_nodes;
94         struct memory_node      *memory_nodes;
95         unsigned long long       memory_bsize;
96         struct hybrid_node      *hybrid_nodes;
97         struct pmu_caps         *pmu_caps;
98 #ifdef HAVE_LIBBPF_SUPPORT
99         /*
100          * bpf_info_lock protects bpf rbtrees. This is needed because the
101          * trees are accessed by different threads in perf-top
102          */
103         struct {
104                 struct rw_semaphore     lock;
105                 struct rb_root          infos;
106                 u32                     infos_cnt;
107                 struct rb_root          btfs;
108                 u32                     btfs_cnt;
109         } bpf_progs;
110 #endif // HAVE_LIBBPF_SUPPORT
111         /* same reason as above (for perf-top) */
112         struct {
113                 struct rw_semaphore     lock;
114                 struct rb_root          tree;
115         } cgroups;
116
117         /* For fast cpu to numa node lookup via perf_env__numa_node */
118         int                     *numa_map;
119         int                      nr_numa_map;
120
121         /* For real clock time reference. */
122         struct {
123                 u64     tod_ns;
124                 u64     clockid_ns;
125                 u64     clockid_res_ns;
126                 int     clockid;
127                 /*
128                  * enabled is valid for report mode, and is true if above
129                  * values are set, it's set in process_clock_data
130                  */
131                 bool    enabled;
132         } clock;
133 };
134
135 enum perf_compress_type {
136         PERF_COMP_NONE = 0,
137         PERF_COMP_ZSTD,
138         PERF_COMP_MAX
139 };
140
141 struct bpf_prog_info_node;
142 struct btf_node;
143
144 extern struct perf_env perf_env;
145
146 void perf_env__exit(struct perf_env *env);
147
148 int perf_env__kernel_is_64_bit(struct perf_env *env);
149
150 int perf_env__set_cmdline(struct perf_env *env, int argc, const char *argv[]);
151
152 int perf_env__read_cpuid(struct perf_env *env);
153 int perf_env__read_pmu_mappings(struct perf_env *env);
154 int perf_env__nr_pmu_mappings(struct perf_env *env);
155 const char *perf_env__pmu_mappings(struct perf_env *env);
156
157 int perf_env__read_cpu_topology_map(struct perf_env *env);
158
159 void cpu_cache_level__free(struct cpu_cache_level *cache);
160
161 const char *perf_env__arch(struct perf_env *env);
162 const char *perf_env__cpuid(struct perf_env *env);
163 const char *perf_env__raw_arch(struct perf_env *env);
164 int perf_env__nr_cpus_avail(struct perf_env *env);
165
166 void perf_env__init(struct perf_env *env);
167 void perf_env__insert_bpf_prog_info(struct perf_env *env,
168                                     struct bpf_prog_info_node *info_node);
169 struct bpf_prog_info_node *perf_env__find_bpf_prog_info(struct perf_env *env,
170                                                         __u32 prog_id);
171 bool perf_env__insert_btf(struct perf_env *env, struct btf_node *btf_node);
172 struct btf_node *perf_env__find_btf(struct perf_env *env, __u32 btf_id);
173
174 int perf_env__numa_node(struct perf_env *env, struct perf_cpu cpu);
175 char *perf_env__find_pmu_cap(struct perf_env *env, const char *pmu_name,
176                              const char *cap);
177 #endif /* __PERF_ENV_H */