Lines Matching refs:env
21 void perf_env__insert_bpf_prog_info(struct perf_env *env, in perf_env__insert_bpf_prog_info() argument
29 down_write(&env->bpf_progs.lock); in perf_env__insert_bpf_prog_info()
30 p = &env->bpf_progs.infos.rb_node; in perf_env__insert_bpf_prog_info()
46 rb_insert_color(&info_node->rb_node, &env->bpf_progs.infos); in perf_env__insert_bpf_prog_info()
47 env->bpf_progs.infos_cnt++; in perf_env__insert_bpf_prog_info()
49 up_write(&env->bpf_progs.lock); in perf_env__insert_bpf_prog_info()
52 struct bpf_prog_info_node *perf_env__find_bpf_prog_info(struct perf_env *env, in perf_env__find_bpf_prog_info() argument
58 down_read(&env->bpf_progs.lock); in perf_env__find_bpf_prog_info()
59 n = env->bpf_progs.infos.rb_node; in perf_env__find_bpf_prog_info()
73 up_read(&env->bpf_progs.lock); in perf_env__find_bpf_prog_info()
77 void perf_env__insert_btf(struct perf_env *env, struct btf_node *btf_node) in perf_env__insert_btf() argument
84 down_write(&env->bpf_progs.lock); in perf_env__insert_btf()
85 p = &env->bpf_progs.btfs.rb_node; in perf_env__insert_btf()
101 rb_insert_color(&btf_node->rb_node, &env->bpf_progs.btfs); in perf_env__insert_btf()
102 env->bpf_progs.btfs_cnt++; in perf_env__insert_btf()
104 up_write(&env->bpf_progs.lock); in perf_env__insert_btf()
107 struct btf_node *perf_env__find_btf(struct perf_env *env, __u32 btf_id) in perf_env__find_btf() argument
112 down_read(&env->bpf_progs.lock); in perf_env__find_btf()
113 n = env->bpf_progs.btfs.rb_node; in perf_env__find_btf()
127 up_read(&env->bpf_progs.lock); in perf_env__find_btf()
132 static void perf_env__purge_bpf(struct perf_env *env) in perf_env__purge_bpf() argument
137 down_write(&env->bpf_progs.lock); in perf_env__purge_bpf()
139 root = &env->bpf_progs.infos; in perf_env__purge_bpf()
152 env->bpf_progs.infos_cnt = 0; in perf_env__purge_bpf()
154 root = &env->bpf_progs.btfs; in perf_env__purge_bpf()
166 env->bpf_progs.btfs_cnt = 0; in perf_env__purge_bpf()
168 up_write(&env->bpf_progs.lock); in perf_env__purge_bpf()
171 static void perf_env__purge_bpf(struct perf_env *env __maybe_unused) in perf_env__purge_bpf()
176 void perf_env__exit(struct perf_env *env) in perf_env__exit() argument
180 perf_env__purge_bpf(env); in perf_env__exit()
181 perf_env__purge_cgroups(env); in perf_env__exit()
182 zfree(&env->hostname); in perf_env__exit()
183 zfree(&env->os_release); in perf_env__exit()
184 zfree(&env->version); in perf_env__exit()
185 zfree(&env->arch); in perf_env__exit()
186 zfree(&env->cpu_desc); in perf_env__exit()
187 zfree(&env->cpuid); in perf_env__exit()
188 zfree(&env->cmdline); in perf_env__exit()
189 zfree(&env->cmdline_argv); in perf_env__exit()
190 zfree(&env->sibling_dies); in perf_env__exit()
191 zfree(&env->sibling_cores); in perf_env__exit()
192 zfree(&env->sibling_threads); in perf_env__exit()
193 zfree(&env->pmu_mappings); in perf_env__exit()
194 zfree(&env->cpu); in perf_env__exit()
195 zfree(&env->cpu_pmu_caps); in perf_env__exit()
196 zfree(&env->numa_map); in perf_env__exit()
198 for (i = 0; i < env->nr_numa_nodes; i++) in perf_env__exit()
199 perf_cpu_map__put(env->numa_nodes[i].map); in perf_env__exit()
200 zfree(&env->numa_nodes); in perf_env__exit()
202 for (i = 0; i < env->caches_cnt; i++) in perf_env__exit()
203 cpu_cache_level__free(&env->caches[i]); in perf_env__exit()
204 zfree(&env->caches); in perf_env__exit()
206 for (i = 0; i < env->nr_memory_nodes; i++) in perf_env__exit()
207 zfree(&env->memory_nodes[i].set); in perf_env__exit()
208 zfree(&env->memory_nodes); in perf_env__exit()
210 for (i = 0; i < env->nr_hybrid_nodes; i++) { in perf_env__exit()
211 zfree(&env->hybrid_nodes[i].pmu_name); in perf_env__exit()
212 zfree(&env->hybrid_nodes[i].cpus); in perf_env__exit()
214 zfree(&env->hybrid_nodes); in perf_env__exit()
216 for (i = 0; i < env->nr_hybrid_cpc_nodes; i++) { in perf_env__exit()
217 zfree(&env->hybrid_cpc_nodes[i].cpu_pmu_caps); in perf_env__exit()
218 zfree(&env->hybrid_cpc_nodes[i].pmu_name); in perf_env__exit()
220 zfree(&env->hybrid_cpc_nodes); in perf_env__exit()
223 void perf_env__init(struct perf_env *env) in perf_env__init() argument
226 env->bpf_progs.infos = RB_ROOT; in perf_env__init()
227 env->bpf_progs.btfs = RB_ROOT; in perf_env__init()
228 init_rwsem(&env->bpf_progs.lock); in perf_env__init()
230 env->kernel_is_64_bit = -1; in perf_env__init()
233 static void perf_env__init_kernel_mode(struct perf_env *env) in perf_env__init_kernel_mode() argument
235 const char *arch = perf_env__raw_arch(env); in perf_env__init_kernel_mode()
241 env->kernel_is_64_bit = 1; in perf_env__init_kernel_mode()
243 env->kernel_is_64_bit = 0; in perf_env__init_kernel_mode()
246 int perf_env__kernel_is_64_bit(struct perf_env *env) in perf_env__kernel_is_64_bit() argument
248 if (env->kernel_is_64_bit == -1) in perf_env__kernel_is_64_bit()
249 perf_env__init_kernel_mode(env); in perf_env__kernel_is_64_bit()
251 return env->kernel_is_64_bit; in perf_env__kernel_is_64_bit()
254 int perf_env__set_cmdline(struct perf_env *env, int argc, const char *argv[]) in perf_env__set_cmdline() argument
259 env->cmdline_argv = calloc(argc, sizeof(char *)); in perf_env__set_cmdline()
260 if (env->cmdline_argv == NULL) in perf_env__set_cmdline()
268 env->cmdline_argv[i] = argv[i]; in perf_env__set_cmdline()
269 if (env->cmdline_argv[i] == NULL) in perf_env__set_cmdline()
273 env->nr_cmdline = argc; in perf_env__set_cmdline()
277 zfree(&env->cmdline_argv); in perf_env__set_cmdline()
282 int perf_env__read_cpu_topology_map(struct perf_env *env) in perf_env__read_cpu_topology_map() argument
286 if (env->cpu != NULL) in perf_env__read_cpu_topology_map()
289 if (env->nr_cpus_avail == 0) in perf_env__read_cpu_topology_map()
290 env->nr_cpus_avail = cpu__max_present_cpu(); in perf_env__read_cpu_topology_map()
292 nr_cpus = env->nr_cpus_avail; in perf_env__read_cpu_topology_map()
296 env->cpu = calloc(nr_cpus, sizeof(env->cpu[0])); in perf_env__read_cpu_topology_map()
297 if (env->cpu == NULL) in perf_env__read_cpu_topology_map()
301 env->cpu[cpu].core_id = cpu_map__get_core_id(cpu); in perf_env__read_cpu_topology_map()
302 env->cpu[cpu].socket_id = cpu_map__get_socket_id(cpu); in perf_env__read_cpu_topology_map()
303 env->cpu[cpu].die_id = cpu_map__get_die_id(cpu); in perf_env__read_cpu_topology_map()
306 env->nr_cpus_avail = nr_cpus; in perf_env__read_cpu_topology_map()
310 int perf_env__read_pmu_mappings(struct perf_env *env) in perf_env__read_pmu_mappings() argument
325 env->nr_pmu_mappings = pmu_num; in perf_env__read_pmu_mappings()
340 env->pmu_mappings = strbuf_detach(&sb, NULL); in perf_env__read_pmu_mappings()
349 int perf_env__read_cpuid(struct perf_env *env) in perf_env__read_cpuid() argument
357 free(env->cpuid); in perf_env__read_cpuid()
358 env->cpuid = strdup(cpuid); in perf_env__read_cpuid()
359 if (env->cpuid == NULL) in perf_env__read_cpuid()
364 static int perf_env__read_arch(struct perf_env *env) in perf_env__read_arch() argument
368 if (env->arch) in perf_env__read_arch()
372 env->arch = strdup(uts.machine); in perf_env__read_arch()
374 return env->arch ? 0 : -ENOMEM; in perf_env__read_arch()
377 static int perf_env__read_nr_cpus_avail(struct perf_env *env) in perf_env__read_nr_cpus_avail() argument
379 if (env->nr_cpus_avail == 0) in perf_env__read_nr_cpus_avail()
380 env->nr_cpus_avail = cpu__max_present_cpu(); in perf_env__read_nr_cpus_avail()
382 return env->nr_cpus_avail ? 0 : -ENOENT; in perf_env__read_nr_cpus_avail()
385 const char *perf_env__raw_arch(struct perf_env *env) in perf_env__raw_arch() argument
387 return env && !perf_env__read_arch(env) ? env->arch : "unknown"; in perf_env__raw_arch()
390 int perf_env__nr_cpus_avail(struct perf_env *env) in perf_env__nr_cpus_avail() argument
392 return env && !perf_env__read_nr_cpus_avail(env) ? env->nr_cpus_avail : 0; in perf_env__nr_cpus_avail()
432 const char *perf_env__arch(struct perf_env *env) in perf_env__arch() argument
436 if (!env || !env->arch) { /* Assume local operation */ in perf_env__arch()
442 arch_name = env->arch; in perf_env__arch()
447 const char *perf_env__cpuid(struct perf_env *env) in perf_env__cpuid() argument
451 if (!env || !env->cpuid) { /* Assume local operation */ in perf_env__cpuid()
452 status = perf_env__read_cpuid(env); in perf_env__cpuid()
457 return env->cpuid; in perf_env__cpuid()
460 int perf_env__nr_pmu_mappings(struct perf_env *env) in perf_env__nr_pmu_mappings() argument
464 if (!env || !env->nr_pmu_mappings) { /* Assume local operation */ in perf_env__nr_pmu_mappings()
465 status = perf_env__read_pmu_mappings(env); in perf_env__nr_pmu_mappings()
470 return env->nr_pmu_mappings; in perf_env__nr_pmu_mappings()
473 const char *perf_env__pmu_mappings(struct perf_env *env) in perf_env__pmu_mappings() argument
477 if (!env || !env->pmu_mappings) { /* Assume local operation */ in perf_env__pmu_mappings()
478 status = perf_env__read_pmu_mappings(env); in perf_env__pmu_mappings()
483 return env->pmu_mappings; in perf_env__pmu_mappings()
486 int perf_env__numa_node(struct perf_env *env, int cpu) in perf_env__numa_node() argument
488 if (!env->nr_numa_map) { in perf_env__numa_node()
492 for (i = 0; i < env->nr_numa_nodes; i++) { in perf_env__numa_node()
493 nn = &env->numa_nodes[i]; in perf_env__numa_node()
503 env->numa_map = malloc(nr * sizeof(int)); in perf_env__numa_node()
504 if (!env->numa_map) in perf_env__numa_node()
508 env->numa_map[i] = -1; in perf_env__numa_node()
510 env->nr_numa_map = nr; in perf_env__numa_node()
512 for (i = 0; i < env->nr_numa_nodes; i++) { in perf_env__numa_node()
515 nn = &env->numa_nodes[i]; in perf_env__numa_node()
517 env->numa_map[j] = i; in perf_env__numa_node()
521 return cpu >= 0 && cpu < env->nr_numa_map ? env->numa_map[cpu] : -1; in perf_env__numa_node()