hc
2023-12-08 01573e231f18eb2d99162747186f59511f56b64d
kernel/tools/perf/util/env.h
....@@ -3,10 +3,14 @@
33 #define __PERF_ENV_H
44
55 #include <linux/types.h>
6
-#include "cpumap.h"
6
+#include <linux/rbtree.h>
7
+#include "rwsem.h"
8
+
9
+struct perf_cpu_map;
710
811 struct cpu_topology_map {
912 int socket_id;
13
+ int die_id;
1014 int core_id;
1115 };
1216
....@@ -24,7 +28,7 @@
2428 u32 node;
2529 u64 mem_total;
2630 u64 mem_free;
27
- struct cpu_map *map;
31
+ struct perf_cpu_map *map;
2832 };
2933
3034 struct memory_node {
....@@ -44,26 +48,80 @@
4448 char *cpuid;
4549 unsigned long long total_mem;
4650 unsigned int msr_pmu_type;
51
+ unsigned int max_branches;
4752
4853 int nr_cmdline;
4954 int nr_sibling_cores;
55
+ int nr_sibling_dies;
5056 int nr_sibling_threads;
5157 int nr_numa_nodes;
5258 int nr_memory_nodes;
5359 int nr_pmu_mappings;
5460 int nr_groups;
61
+ int nr_cpu_pmu_caps;
5562 char *cmdline;
5663 const char **cmdline_argv;
5764 char *sibling_cores;
65
+ char *sibling_dies;
5866 char *sibling_threads;
5967 char *pmu_mappings;
68
+ char *cpu_pmu_caps;
6069 struct cpu_topology_map *cpu;
6170 struct cpu_cache_level *caches;
6271 int caches_cnt;
72
+ u32 comp_ratio;
73
+ u32 comp_ver;
74
+ u32 comp_type;
75
+ u32 comp_level;
76
+ u32 comp_mmap_len;
6377 struct numa_node *numa_nodes;
6478 struct memory_node *memory_nodes;
6579 unsigned long long memory_bsize;
80
+
81
+ /*
82
+ * bpf_info_lock protects bpf rbtrees. This is needed because the
83
+ * trees are accessed by different threads in perf-top
84
+ */
85
+ struct {
86
+ struct rw_semaphore lock;
87
+ struct rb_root infos;
88
+ u32 infos_cnt;
89
+ struct rb_root btfs;
90
+ u32 btfs_cnt;
91
+ } bpf_progs;
92
+
93
+ /* same reason as above (for perf-top) */
94
+ struct {
95
+ struct rw_semaphore lock;
96
+ struct rb_root tree;
97
+ } cgroups;
98
+
99
+ /* For fast cpu to numa node lookup via perf_env__numa_node */
100
+ int *numa_map;
101
+ int nr_numa_map;
102
+
103
+ /* For real clock time reference. */
104
+ struct {
105
+ u64 tod_ns;
106
+ u64 clockid_ns;
107
+ u64 clockid_res_ns;
108
+ int clockid;
109
+ /*
110
+ * enabled is valid for report mode, and is true if above
111
+ * values are set, it's set in process_clock_data
112
+ */
113
+ bool enabled;
114
+ } clock;
66115 };
116
+
117
+enum perf_compress_type {
118
+ PERF_COMP_NONE = 0,
119
+ PERF_COMP_ZSTD,
120
+ PERF_COMP_MAX
121
+};
122
+
123
+struct bpf_prog_info_node;
124
+struct btf_node;
67125
68126 extern struct perf_env perf_env;
69127
....@@ -71,6 +129,7 @@
71129
72130 int perf_env__set_cmdline(struct perf_env *env, int argc, const char *argv[]);
73131
132
+int perf_env__read_cpuid(struct perf_env *env);
74133 int perf_env__read_cpu_topology_map(struct perf_env *env);
75134
76135 void cpu_cache_level__free(struct cpu_cache_level *cache);
....@@ -79,4 +138,13 @@
79138 const char *perf_env__raw_arch(struct perf_env *env);
80139 int perf_env__nr_cpus_avail(struct perf_env *env);
81140
141
+void perf_env__init(struct perf_env *env);
142
+void perf_env__insert_bpf_prog_info(struct perf_env *env,
143
+ struct bpf_prog_info_node *info_node);
144
+struct bpf_prog_info_node *perf_env__find_bpf_prog_info(struct perf_env *env,
145
+ __u32 prog_id);
146
+bool perf_env__insert_btf(struct perf_env *env, struct btf_node *btf_node);
147
+struct btf_node *perf_env__find_btf(struct perf_env *env, __u32 btf_id);
148
+
149
+int perf_env__numa_node(struct perf_env *env, int cpu);
82150 #endif /* __PERF_ENV_H */