Lines Matching refs:cands

8131 	} cands[];  member
8134 static void bpf_free_cands(struct bpf_cand_cache *cands) in bpf_free_cands() argument
8136 if (!cands->cnt) in bpf_free_cands()
8139 kfree(cands); in bpf_free_cands()
8142 static void bpf_free_cands_from_cache(struct bpf_cand_cache *cands) in bpf_free_cands_from_cache() argument
8144 kfree(cands->name); in bpf_free_cands_from_cache()
8145 kfree(cands); in bpf_free_cands_from_cache()
8169 bpf_log(log, "%d", cc->cands[j].id); in __print_cand_cache()
8188 static u32 hash_cands(struct bpf_cand_cache *cands) in hash_cands() argument
8190 return jhash(cands->name, cands->name_len, 0); in hash_cands()
8193 static struct bpf_cand_cache *check_cand_cache(struct bpf_cand_cache *cands, in check_cand_cache() argument
8197 struct bpf_cand_cache *cc = cache[hash_cands(cands) % cache_size]; in check_cand_cache()
8199 if (cc && cc->name_len == cands->name_len && in check_cand_cache()
8200 !strncmp(cc->name, cands->name, cands->name_len)) in check_cand_cache()
8207 return offsetof(struct bpf_cand_cache, cands[cnt]); in sizeof_cands()
8210 static struct bpf_cand_cache *populate_cand_cache(struct bpf_cand_cache *cands, in populate_cand_cache() argument
8214 struct bpf_cand_cache **cc = &cache[hash_cands(cands) % cache_size], *new_cands; in populate_cand_cache()
8220 new_cands = kmemdup(cands, sizeof_cands(cands->cnt), GFP_KERNEL); in populate_cand_cache()
8222 bpf_free_cands(cands); in populate_cand_cache()
8228 new_cands->name = kmemdup_nul(cands->name, cands->name_len, GFP_KERNEL); in populate_cand_cache()
8229 bpf_free_cands(cands); in populate_cand_cache()
8262 if (cc->cands[j].btf == btf) { in __purge_cand_cache()
8280 bpf_core_add_cands(struct bpf_cand_cache *cands, const struct btf *targ_btf, in bpf_core_add_cands() argument
8292 if (btf_kind(t) != cands->kind) in bpf_core_add_cands()
8304 if (strncmp(cands->name, targ_name, cands->name_len) != 0) in bpf_core_add_cands()
8308 if (targ_essent_len != cands->name_len) in bpf_core_add_cands()
8312 new_cands = kmalloc(sizeof_cands(cands->cnt + 1), GFP_KERNEL); in bpf_core_add_cands()
8314 bpf_free_cands(cands); in bpf_core_add_cands()
8318 memcpy(new_cands, cands, sizeof_cands(cands->cnt)); in bpf_core_add_cands()
8319 bpf_free_cands(cands); in bpf_core_add_cands()
8320 cands = new_cands; in bpf_core_add_cands()
8321 cands->cands[cands->cnt].btf = targ_btf; in bpf_core_add_cands()
8322 cands->cands[cands->cnt].id = i; in bpf_core_add_cands()
8323 cands->cnt++; in bpf_core_add_cands()
8325 return cands; in bpf_core_add_cands()
8331 struct bpf_cand_cache *cands, *cc, local_cand = {}; in bpf_core_find_cands() local
8355 cands = &local_cand; in bpf_core_find_cands()
8356 cands->name = name; in bpf_core_find_cands()
8357 cands->kind = btf_kind(local_type); in bpf_core_find_cands()
8358 cands->name_len = local_essent_len; in bpf_core_find_cands()
8360 cc = check_cand_cache(cands, vmlinux_cand_cache, VMLINUX_CAND_CACHE_SIZE); in bpf_core_find_cands()
8369 cands = bpf_core_add_cands(cands, main_btf, 1); in bpf_core_find_cands()
8370 if (IS_ERR(cands)) in bpf_core_find_cands()
8371 return ERR_CAST(cands); in bpf_core_find_cands()
8376 cc = populate_cand_cache(cands, vmlinux_cand_cache, VMLINUX_CAND_CACHE_SIZE); in bpf_core_find_cands()
8386 cc = check_cand_cache(cands, module_cand_cache, MODULE_CAND_CACHE_SIZE); in bpf_core_find_cands()
8401 cands = bpf_core_add_cands(cands, mod_btf, btf_nr_types(main_btf)); in bpf_core_find_cands()
8403 if (IS_ERR(cands)) in bpf_core_find_cands()
8404 return ERR_CAST(cands); in bpf_core_find_cands()
8413 return populate_cand_cache(cands, module_cand_cache, MODULE_CAND_CACHE_SIZE); in bpf_core_find_cands()
8420 struct bpf_core_cand_list cands = {}; in bpf_core_apply() local
8445 cands.cands = kcalloc(cc->cnt, sizeof(*cands.cands), GFP_KERNEL); in bpf_core_apply()
8446 if (!cands.cands) { in bpf_core_apply()
8454 btf_kind_str[cc->kind], cc->name, cc->cands[i].id); in bpf_core_apply()
8455 cands.cands[i].btf = cc->cands[i].btf; in bpf_core_apply()
8456 cands.cands[i].id = cc->cands[i].id; in bpf_core_apply()
8458 cands.len = cc->cnt; in bpf_core_apply()
8466 err = bpf_core_calc_relo_insn((void *)ctx->log, relo, relo_idx, ctx->btf, &cands, specs, in bpf_core_apply()
8477 kfree(cands.cands); in bpf_core_apply()