Lines Matching refs:man

271 	struct usdt_manager *man;
281 man = calloc(1, sizeof(*man));
282 if (!man)
285 man->specs_map = specs_map;
286 man->ip_to_spec_id_map = ip_to_spec_id_map;
292 man->has_bpf_cookie = kernel_supports(obj, FEAT_BPF_COOKIE);
298 man->has_sema_refcnt = faccessat(AT_FDCWD, ref_ctr_sysfs_path, F_OK, AT_EACCESS) == 0;
304 man->has_uprobe_multi = kernel_supports(obj, FEAT_UPROBE_MULTI_LINK);
311 man->has_uprobe_syscall = kernel_supports(obj, FEAT_UPROBE_SYSCALL);
312 return man;
315 void usdt_manager_free(struct usdt_manager *man)
317 if (IS_ERR_OR_NULL(man))
320 free(man->free_spec_ids);
321 free(man);
615 static int collect_usdt_targets(struct usdt_manager *man, struct elf_fd *elf_fd, const char *path,
727 if (ehdr.e_type == ET_DYN && !man->has_bpf_cookie) {
775 if (!man->has_sema_refcnt) {
821 if (man->has_uprobe_syscall && has_nop_combo(elf_fd->fd, usdt_rel_ip)) {
874 struct usdt_manager *man = usdt_link->usdt_man;
889 if (!man->has_bpf_cookie) {
891 (void)bpf_map_delete_elem(bpf_map__fd(man->ip_to_spec_id_map),
899 if (!man->free_spec_ids) {
901 man->free_spec_ids = usdt_link->spec_ids;
902 man->free_spec_cnt = usdt_link->spec_cnt;
906 size_t new_cnt = man->free_spec_cnt + usdt_link->spec_cnt;
909 new_free_ids = libbpf_reallocarray(man->free_spec_ids, new_cnt,
921 memcpy(new_free_ids + man->free_spec_cnt, usdt_link->spec_ids,
923 man->free_spec_ids = new_free_ids;
924 man->free_spec_cnt = new_cnt;
950 static int allocate_spec_id(struct usdt_manager *man, struct hashmap *specs_hash,
974 if (man->free_spec_cnt) {
975 *spec_id = man->free_spec_ids[man->free_spec_cnt - 1];
982 man->free_spec_cnt--;
985 if (man->next_free_spec_id >= bpf_map__max_entries(man->specs_map))
988 *spec_id = man->next_free_spec_id;
995 man->next_free_spec_id++;
1005 struct bpf_link *usdt_manager_attach_usdt(struct usdt_manager *man, const struct bpf_program *prog,
1020 spec_map_fd = bpf_map__fd(man->specs_map);
1021 ip_map_fd = bpf_map__fd(man->ip_to_spec_id_map);
1040 err = collect_usdt_targets(man, &elf_fd, path, pid, usdt_provider, usdt_name,
1059 link->usdt_man = man;
1063 if (man->has_uprobe_multi) {
1094 err = allocate_spec_id(man, specs_hash, link, target, &spec_id, &is_new);
1104 if (!man->has_bpf_cookie &&
1118 if (man->has_uprobe_multi) {
1124 opts.bpf_cookie = man->has_bpf_cookie ? spec_id : 0;
1140 if (man->has_uprobe_multi) {