Lines Matching refs:cands
7573 } cands[]; member
7616 if (btf_is_module(cc->cands[0].btf)) { in btf_get_ptr_to_btf_id()
7622 kern_type_id = cc->cands[0].id; in btf_get_ptr_to_btf_id()
8940 static void bpf_free_cands(struct bpf_cand_cache *cands) in bpf_free_cands() argument
8942 if (!cands->cnt) in bpf_free_cands()
8945 kfree(cands); in bpf_free_cands()
8948 static void bpf_free_cands_from_cache(struct bpf_cand_cache *cands) in bpf_free_cands_from_cache() argument
8950 kfree(cands->name); in bpf_free_cands_from_cache()
8951 kfree(cands); in bpf_free_cands_from_cache()
8973 bpf_log(log, "%d", cc->cands[j].id); in __print_cand_cache()
8992 static u32 hash_cands(struct bpf_cand_cache *cands) in hash_cands() argument
8994 return jhash(cands->name, cands->name_len, 0); in hash_cands()
8997 static struct bpf_cand_cache *check_cand_cache(struct bpf_cand_cache *cands, in check_cand_cache() argument
9001 struct bpf_cand_cache *cc = cache[hash_cands(cands) % cache_size]; in check_cand_cache()
9003 if (cc && cc->name_len == cands->name_len && in check_cand_cache()
9004 !strncmp(cc->name, cands->name, cands->name_len)) in check_cand_cache()
9011 return offsetof(struct bpf_cand_cache, cands[cnt]); in sizeof_cands()
9014 static struct bpf_cand_cache *populate_cand_cache(struct bpf_cand_cache *cands, in populate_cand_cache() argument
9018 struct bpf_cand_cache **cc = &cache[hash_cands(cands) % cache_size], *new_cands; in populate_cand_cache()
9024 new_cands = kmemdup(cands, sizeof_cands(cands->cnt), GFP_KERNEL); in populate_cand_cache()
9026 bpf_free_cands(cands); in populate_cand_cache()
9032 new_cands->name = kmemdup_nul(cands->name, cands->name_len, GFP_KERNEL); in populate_cand_cache()
9033 bpf_free_cands(cands); in populate_cand_cache()
9066 if (cc->cands[j].btf == btf) { in __purge_cand_cache()
9084 bpf_core_add_cands(struct bpf_cand_cache *cands, const struct btf *targ_btf, in bpf_core_add_cands() argument
9096 if (btf_kind(t) != cands->kind) in bpf_core_add_cands()
9108 if (strncmp(cands->name, targ_name, cands->name_len) != 0) in bpf_core_add_cands()
9112 if (targ_essent_len != cands->name_len) in bpf_core_add_cands()
9116 new_cands = kmalloc(sizeof_cands(cands->cnt + 1), GFP_KERNEL); in bpf_core_add_cands()
9118 bpf_free_cands(cands); in bpf_core_add_cands()
9122 memcpy(new_cands, cands, sizeof_cands(cands->cnt)); in bpf_core_add_cands()
9123 bpf_free_cands(cands); in bpf_core_add_cands()
9124 cands = new_cands; in bpf_core_add_cands()
9125 cands->cands[cands->cnt].btf = targ_btf; in bpf_core_add_cands()
9126 cands->cands[cands->cnt].id = i; in bpf_core_add_cands()
9127 cands->cnt++; in bpf_core_add_cands()
9129 return cands; in bpf_core_add_cands()
9135 struct bpf_cand_cache *cands, *cc, local_cand = {}; in bpf_core_find_cands() local
9159 cands = &local_cand; in bpf_core_find_cands()
9160 cands->name = name; in bpf_core_find_cands()
9161 cands->kind = btf_kind(local_type); in bpf_core_find_cands()
9162 cands->name_len = local_essent_len; in bpf_core_find_cands()
9164 cc = check_cand_cache(cands, vmlinux_cand_cache, VMLINUX_CAND_CACHE_SIZE); in bpf_core_find_cands()
9173 cands = bpf_core_add_cands(cands, main_btf, 1); in bpf_core_find_cands()
9174 if (IS_ERR(cands)) in bpf_core_find_cands()
9175 return ERR_CAST(cands); in bpf_core_find_cands()
9180 cc = populate_cand_cache(cands, vmlinux_cand_cache, VMLINUX_CAND_CACHE_SIZE); in bpf_core_find_cands()
9190 cc = check_cand_cache(cands, module_cand_cache, MODULE_CAND_CACHE_SIZE); in bpf_core_find_cands()
9205 cands = bpf_core_add_cands(cands, mod_btf, btf_nr_types(main_btf)); in bpf_core_find_cands()
9207 if (IS_ERR(cands)) in bpf_core_find_cands()
9208 return ERR_CAST(cands); in bpf_core_find_cands()
9217 return populate_cand_cache(cands, module_cand_cache, MODULE_CAND_CACHE_SIZE); in bpf_core_find_cands()
9224 struct bpf_core_cand_list cands = {}; in bpf_core_apply() local
9258 cands.cands = kcalloc(cc->cnt, sizeof(*cands.cands), GFP_KERNEL); in bpf_core_apply()
9259 if (!cands.cands) { in bpf_core_apply()
9267 btf_kind_str[cc->kind], cc->name, cc->cands[i].id); in bpf_core_apply()
9268 cands.cands[i].btf = cc->cands[i].btf; in bpf_core_apply()
9269 cands.cands[i].id = cc->cands[i].id; in bpf_core_apply()
9271 cands.len = cc->cnt; in bpf_core_apply()
9279 err = bpf_core_calc_relo_insn((void *)ctx->log, relo, relo_idx, ctx->btf, &cands, specs, in bpf_core_apply()
9290 kfree(cands.cands); in bpf_core_apply()