1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */ 2f0ce888cSArnaldo Carvalho de Melo #ifndef __PERF_ENV_H 3f0ce888cSArnaldo Carvalho de Melo #define __PERF_ENV_H 4f0ce888cSArnaldo Carvalho de Melo 5720e98b5SJiri Olsa #include <linux/types.h> 6e4378f0cSSong Liu #include <linux/rbtree.h> 7e4378f0cSSong Liu #include "rwsem.h" 8720e98b5SJiri Olsa 987ffb6c6SArnaldo Carvalho de Melo struct perf_cpu_map; 1087ffb6c6SArnaldo Carvalho de Melo 11f0ce888cSArnaldo Carvalho de Melo struct cpu_topology_map { 12f0ce888cSArnaldo Carvalho de Melo int socket_id; 13acae8b36SKan Liang int die_id; 14f0ce888cSArnaldo Carvalho de Melo int core_id; 15f0ce888cSArnaldo Carvalho de Melo }; 16f0ce888cSArnaldo Carvalho de Melo 17720e98b5SJiri Olsa struct cpu_cache_level { 18720e98b5SJiri Olsa u32 level; 19720e98b5SJiri Olsa u32 line_size; 20720e98b5SJiri Olsa u32 sets; 21720e98b5SJiri Olsa u32 ways; 22720e98b5SJiri Olsa char *type; 23720e98b5SJiri Olsa char *size; 24720e98b5SJiri Olsa char *map; 25720e98b5SJiri Olsa }; 26720e98b5SJiri Olsa 27c60da22aSJiri Olsa struct numa_node { 28c60da22aSJiri Olsa u32 node; 29c60da22aSJiri Olsa u64 mem_total; 30c60da22aSJiri Olsa u64 mem_free; 31f854839bSJiri Olsa struct perf_cpu_map *map; 32c60da22aSJiri Olsa }; 33c60da22aSJiri Olsa 34e2091cedSJiri Olsa struct memory_node { 35e2091cedSJiri Olsa u64 node; 36e2091cedSJiri Olsa u64 size; 37e2091cedSJiri Olsa unsigned long *set; 38e2091cedSJiri Olsa }; 39e2091cedSJiri Olsa 40f0ce888cSArnaldo Carvalho de Melo struct perf_env { 41f0ce888cSArnaldo Carvalho de Melo char *hostname; 42f0ce888cSArnaldo Carvalho de Melo char *os_release; 43f0ce888cSArnaldo Carvalho de Melo char *version; 44f0ce888cSArnaldo Carvalho de Melo char *arch; 45f0ce888cSArnaldo Carvalho de Melo int nr_cpus_online; 46f0ce888cSArnaldo Carvalho de Melo int nr_cpus_avail; 47f0ce888cSArnaldo Carvalho de Melo char *cpu_desc; 48f0ce888cSArnaldo Carvalho de Melo char *cpuid; 49f0ce888cSArnaldo Carvalho de Melo unsigned long long total_mem; 50e0838e02SKan Liang unsigned int msr_pmu_type; 516f91ea28SKan Liang unsigned int max_branches; 52f0ce888cSArnaldo Carvalho de Melo 53f0ce888cSArnaldo Carvalho de Melo int nr_cmdline; 54f0ce888cSArnaldo Carvalho de Melo int nr_sibling_cores; 55acae8b36SKan Liang int nr_sibling_dies; 56f0ce888cSArnaldo Carvalho de Melo int nr_sibling_threads; 57f0ce888cSArnaldo Carvalho de Melo int nr_numa_nodes; 58e2091cedSJiri Olsa int nr_memory_nodes; 59f0ce888cSArnaldo Carvalho de Melo int nr_pmu_mappings; 60f0ce888cSArnaldo Carvalho de Melo int nr_groups; 616f91ea28SKan Liang int nr_cpu_pmu_caps; 62f0ce888cSArnaldo Carvalho de Melo char *cmdline; 63f0ce888cSArnaldo Carvalho de Melo const char **cmdline_argv; 64f0ce888cSArnaldo Carvalho de Melo char *sibling_cores; 65acae8b36SKan Liang char *sibling_dies; 66f0ce888cSArnaldo Carvalho de Melo char *sibling_threads; 67f0ce888cSArnaldo Carvalho de Melo char *pmu_mappings; 686f91ea28SKan Liang char *cpu_pmu_caps; 69f0ce888cSArnaldo Carvalho de Melo struct cpu_topology_map *cpu; 70720e98b5SJiri Olsa struct cpu_cache_level *caches; 71720e98b5SJiri Olsa int caches_cnt; 72d3c8c08eSAlexey Budankov u32 comp_ratio; 7342e1fd80SAlexey Budankov u32 comp_ver; 7442e1fd80SAlexey Budankov u32 comp_type; 7542e1fd80SAlexey Budankov u32 comp_level; 7642e1fd80SAlexey Budankov u32 comp_mmap_len; 77c60da22aSJiri Olsa struct numa_node *numa_nodes; 78e2091cedSJiri Olsa struct memory_node *memory_nodes; 79e2091cedSJiri Olsa unsigned long long memory_bsize; 80e4378f0cSSong Liu 81e4378f0cSSong Liu /* 82e4378f0cSSong Liu * bpf_info_lock protects bpf rbtrees. This is needed because the 83e4378f0cSSong Liu * trees are accessed by different threads in perf-top 84e4378f0cSSong Liu */ 85e4378f0cSSong Liu struct { 86e4378f0cSSong Liu struct rw_semaphore lock; 87e4378f0cSSong Liu struct rb_root infos; 88e4378f0cSSong Liu u32 infos_cnt; 893792cb2fSSong Liu struct rb_root btfs; 903792cb2fSSong Liu u32 btfs_cnt; 91e4378f0cSSong Liu } bpf_progs; 92389799a7SJiri Olsa 93d1277aa3SNamhyung Kim /* same reason as above (for perf-top) */ 94d1277aa3SNamhyung Kim struct { 95d1277aa3SNamhyung Kim struct rw_semaphore lock; 96d1277aa3SNamhyung Kim struct rb_root tree; 97d1277aa3SNamhyung Kim } cgroups; 98d1277aa3SNamhyung Kim 99389799a7SJiri Olsa /* For fast cpu to numa node lookup via perf_env__numa_node */ 100389799a7SJiri Olsa int *numa_map; 101389799a7SJiri Olsa int nr_numa_map; 102d1e325cfSJiri Olsa 103d1e325cfSJiri Olsa /* For real clock time reference. */ 104d1e325cfSJiri Olsa struct { 105d1e325cfSJiri Olsa u64 tod_ns; 106d1e325cfSJiri Olsa u64 clockid_ns; 107*9d88a1a1SJiri Olsa u64 clockid_res_ns; 108d1e325cfSJiri Olsa int clockid; 109d1e325cfSJiri Olsa /* 110d1e325cfSJiri Olsa * enabled is valid for report mode, and is true if above 111d1e325cfSJiri Olsa * values are set, it's set in process_clock_data 112d1e325cfSJiri Olsa */ 113d1e325cfSJiri Olsa bool enabled; 114d1e325cfSJiri Olsa } clock; 115f0ce888cSArnaldo Carvalho de Melo }; 116f0ce888cSArnaldo Carvalho de Melo 11742e1fd80SAlexey Budankov enum perf_compress_type { 11842e1fd80SAlexey Budankov PERF_COMP_NONE = 0, 11942e1fd80SAlexey Budankov PERF_COMP_ZSTD, 12042e1fd80SAlexey Budankov PERF_COMP_MAX 12142e1fd80SAlexey Budankov }; 12242e1fd80SAlexey Budankov 123e4378f0cSSong Liu struct bpf_prog_info_node; 1243792cb2fSSong Liu struct btf_node; 125e4378f0cSSong Liu 126b6998692SArnaldo Carvalho de Melo extern struct perf_env perf_env; 127b6998692SArnaldo Carvalho de Melo 128f0ce888cSArnaldo Carvalho de Melo void perf_env__exit(struct perf_env *env); 129f0ce888cSArnaldo Carvalho de Melo 130b6998692SArnaldo Carvalho de Melo int perf_env__set_cmdline(struct perf_env *env, int argc, const char *argv[]); 131b6998692SArnaldo Carvalho de Melo 132f1cedfb8SArnaldo Carvalho de Melo int perf_env__read_cpuid(struct perf_env *env); 133aa36ddd7SArnaldo Carvalho de Melo int perf_env__read_cpu_topology_map(struct perf_env *env); 134aa36ddd7SArnaldo Carvalho de Melo 135720e98b5SJiri Olsa void cpu_cache_level__free(struct cpu_cache_level *cache); 1364e8fbc1cSArnaldo Carvalho de Melo 1374e8fbc1cSArnaldo Carvalho de Melo const char *perf_env__arch(struct perf_env *env); 138dbbd34a6SAdrian Hunter const char *perf_env__raw_arch(struct perf_env *env); 1399cecca32SAdrian Hunter int perf_env__nr_cpus_avail(struct perf_env *env); 140dbbd34a6SAdrian Hunter 141e4378f0cSSong Liu void perf_env__init(struct perf_env *env); 142e4378f0cSSong Liu void perf_env__insert_bpf_prog_info(struct perf_env *env, 143e4378f0cSSong Liu struct bpf_prog_info_node *info_node); 144e4378f0cSSong Liu struct bpf_prog_info_node *perf_env__find_bpf_prog_info(struct perf_env *env, 145e4378f0cSSong Liu __u32 prog_id); 1463792cb2fSSong Liu void perf_env__insert_btf(struct perf_env *env, struct btf_node *btf_node); 1473792cb2fSSong Liu struct btf_node *perf_env__find_btf(struct perf_env *env, __u32 btf_id); 148389799a7SJiri Olsa 149389799a7SJiri Olsa int perf_env__numa_node(struct perf_env *env, int cpu); 150f0ce888cSArnaldo Carvalho de Melo #endif /* __PERF_ENV_H */ 151