tools/perf/util/env.c
Source file repositories/reference/linux-study-clean/tools/perf/util/env.c
File Facts
- System
- Linux kernel
- Corpus path
tools/perf/util/env.c- Extension
.c- Size
- 18946 bytes
- Lines
- 856
- Domain
- Support Tooling And Documentation
- Bucket
- tools
- Inferred role
- Support Tooling And Documentation: implementation source
- Status
- source implementation candidate
Why This File Exists
Repository support layer: documentation, build tooling, samples, user-space helper tools, generated initramfs support, licenses, and validation utilities.
- Repository support layer: documentation, build tooling, samples, user-space helper tools, generated initramfs support, licenses, and validation utilities.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
cpumap.hdebug.henv.hutil/header.hutil/rwsem.hlinux/compiler.hlinux/ctype.hlinux/rbtree.hlinux/string.hlinux/zalloc.hcgroup.herrno.hsys/utsname.hstdlib.hstring.hpmu.hpmus.hstrbuf.htrace/beauty/beauty.hbpf-event.hbpf-utils.hbpf/libbpf.htrace/beauty/arch_errno_names.c
Detected Declarations
function perf_env__insert_bpf_prog_infofunction __perf_env__insert_bpf_prog_infofunction perf_env__iterate_bpf_prog_infofunction perf_env__insert_btffunction __perf_env__insert_btffunction perf_env__purge_bpffunction perf_env__purge_bpffunction perf_env__exitfunction perf_env__initfunction perf_env__init_kernel_modefunction perf_env__kernel_is_64_bitfunction perf_env__set_cmdlinefunction perf_env__read_cpu_topology_mapfunction perf_env__read_pmu_mappingsfunction perf_env__read_cpuidfunction perf_env__read_archfunction perf_env__read_nr_cpus_availfunction __perf_env__read_core_pmu_capsfunction perf_env__read_core_pmu_capsfunction perf_env__nr_cpus_availfunction cpu_cache_level__freefunction perf_env__nr_pmu_mappingsfunction perf_env__numa_nodefunction perf_env__has_pmu_mappingfunction perf_env__find_br_cntr_infofunction perf_env__is_x86_amd_cpufunction x86__is_amd_cpufunction perf_env__is_x86_intel_cpufunction x86__is_intel_cpu
Annotated Snippet
if (prog_id < node->info_linear->info.id) {
p = &(*p)->rb_left;
} else if (prog_id > node->info_linear->info.id) {
p = &(*p)->rb_right;
} else {
pr_debug("duplicated bpf prog info %u\n", prog_id);
return false;
}
}
rb_link_node(&info_node->rb_node, parent, p);
rb_insert_color(&info_node->rb_node, &env->bpf_progs.infos);
env->bpf_progs.infos_cnt++;
return true;
}
struct bpf_prog_info_node *perf_env__find_bpf_prog_info(struct perf_env *env,
__u32 prog_id)
{
struct bpf_prog_info_node *node = NULL;
struct rb_node *n;
down_read(&env->bpf_progs.lock);
n = env->bpf_progs.infos.rb_node;
while (n) {
node = rb_entry(n, struct bpf_prog_info_node, rb_node);
if (prog_id < node->info_linear->info.id)
n = n->rb_left;
else if (prog_id > node->info_linear->info.id)
n = n->rb_right;
else
goto out;
}
node = NULL;
out:
up_read(&env->bpf_progs.lock);
return node;
}
void perf_env__iterate_bpf_prog_info(struct perf_env *env,
void (*cb)(struct bpf_prog_info_node *node,
void *data),
void *data)
{
struct rb_node *first;
down_read(&env->bpf_progs.lock);
first = rb_first(&env->bpf_progs.infos);
for (struct rb_node *node = first; node != NULL; node = rb_next(node))
(*cb)(rb_entry(node, struct bpf_prog_info_node, rb_node), data);
up_read(&env->bpf_progs.lock);
}
bool perf_env__insert_btf(struct perf_env *env, struct btf_node *btf_node)
{
bool ret;
down_write(&env->bpf_progs.lock);
ret = __perf_env__insert_btf(env, btf_node);
up_write(&env->bpf_progs.lock);
return ret;
}
bool __perf_env__insert_btf(struct perf_env *env, struct btf_node *btf_node)
{
struct rb_node *parent = NULL;
__u32 btf_id = btf_node->id;
struct btf_node *node;
struct rb_node **p;
p = &env->bpf_progs.btfs.rb_node;
while (*p != NULL) {
parent = *p;
node = rb_entry(parent, struct btf_node, rb_node);
if (btf_id < node->id) {
p = &(*p)->rb_left;
} else if (btf_id > node->id) {
p = &(*p)->rb_right;
} else {
pr_debug("duplicated btf %u\n", btf_id);
return false;
}
}
rb_link_node(&btf_node->rb_node, parent, p);
rb_insert_color(&btf_node->rb_node, &env->bpf_progs.btfs);
env->bpf_progs.btfs_cnt++;
Annotation
- Immediate include surface: `cpumap.h`, `debug.h`, `env.h`, `util/header.h`, `util/rwsem.h`, `linux/compiler.h`, `linux/ctype.h`, `linux/rbtree.h`.
- Detected declarations: `function perf_env__insert_bpf_prog_info`, `function __perf_env__insert_bpf_prog_info`, `function perf_env__iterate_bpf_prog_info`, `function perf_env__insert_btf`, `function __perf_env__insert_btf`, `function perf_env__purge_bpf`, `function perf_env__purge_bpf`, `function perf_env__exit`, `function perf_env__init`, `function perf_env__init_kernel_mode`.
- Atlas domain: Support Tooling And Documentation / tools.
- Implementation status: source implementation candidate.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.