Lines Matching refs:nfp_prog

60 nfp_map_ptr_record(struct nfp_app_bpf *bpf, struct nfp_prog *nfp_prog,  in nfp_map_ptr_record()  argument
73 nfp_prog->map_records[nfp_prog->map_records_cnt++] = record; in nfp_map_ptr_record()
100 nfp_prog->map_records[nfp_prog->map_records_cnt++] = record; in nfp_map_ptr_record()
112 nfp_map_ptrs_forget(struct nfp_app_bpf *bpf, struct nfp_prog *nfp_prog) in nfp_map_ptrs_forget() argument
119 for (i = 0; i < nfp_prog->map_records_cnt; i++) { in nfp_map_ptrs_forget()
120 if (--nfp_prog->map_records[i]->count) { in nfp_map_ptrs_forget()
121 nfp_prog->map_records[i] = NULL; in nfp_map_ptrs_forget()
126 &nfp_prog->map_records[i]->l, in nfp_map_ptrs_forget()
134 for (i = 0; i < nfp_prog->map_records_cnt; i++) in nfp_map_ptrs_forget()
135 if (nfp_prog->map_records[i]) { in nfp_map_ptrs_forget()
136 bpf_map_put(nfp_prog->map_records[i]->ptr); in nfp_map_ptrs_forget()
137 kfree(nfp_prog->map_records[i]); in nfp_map_ptrs_forget()
141 kfree(nfp_prog->map_records); in nfp_map_ptrs_forget()
142 nfp_prog->map_records = NULL; in nfp_map_ptrs_forget()
143 nfp_prog->map_records_cnt = 0; in nfp_map_ptrs_forget()
147 nfp_map_ptrs_record(struct nfp_app_bpf *bpf, struct nfp_prog *nfp_prog, in nfp_map_ptrs_record() argument
160 nfp_prog->map_records = kmalloc_array(cnt, in nfp_map_ptrs_record()
161 sizeof(nfp_prog->map_records[0]), in nfp_map_ptrs_record()
163 if (!nfp_prog->map_records) in nfp_map_ptrs_record()
168 err = nfp_map_ptr_record(bpf, nfp_prog, in nfp_map_ptrs_record()
171 nfp_map_ptrs_forget(bpf, nfp_prog); in nfp_map_ptrs_record()
175 WARN_ON(cnt != nfp_prog->map_records_cnt); in nfp_map_ptrs_record()
181 nfp_prog_prepare(struct nfp_prog *nfp_prog, const struct bpf_insn *prog, in nfp_prog_prepare() argument
199 list_add_tail(&meta->l, &nfp_prog->insns); in nfp_prog_prepare()
202 nfp_bpf_jit_prepare(nfp_prog, cnt); in nfp_prog_prepare()
207 static void nfp_prog_free(struct nfp_prog *nfp_prog) in nfp_prog_free() argument
211 list_for_each_entry_safe(meta, tmp, &nfp_prog->insns, l) { in nfp_prog_free()
215 kfree(nfp_prog); in nfp_prog_free()
223 struct nfp_prog *nfp_prog; in nfp_bpf_verifier_prep() local
226 nfp_prog = kzalloc(sizeof(*nfp_prog), GFP_KERNEL); in nfp_bpf_verifier_prep()
227 if (!nfp_prog) in nfp_bpf_verifier_prep()
229 prog->aux->offload->dev_priv = nfp_prog; in nfp_bpf_verifier_prep()
231 INIT_LIST_HEAD(&nfp_prog->insns); in nfp_bpf_verifier_prep()
232 nfp_prog->type = prog->type; in nfp_bpf_verifier_prep()
233 nfp_prog->bpf = app->priv; in nfp_bpf_verifier_prep()
235 ret = nfp_prog_prepare(nfp_prog, prog->insnsi, prog->len); in nfp_bpf_verifier_prep()
239 nfp_prog->verifier_meta = nfp_prog_first_meta(nfp_prog); in nfp_bpf_verifier_prep()
245 nfp_prog_free(nfp_prog); in nfp_bpf_verifier_prep()
252 struct nfp_prog *nfp_prog = prog->aux->offload->dev_priv; in nfp_bpf_translate() local
263 nfp_prog->stack_depth = round_up(prog->aux->stack_depth, 4); in nfp_bpf_translate()
266 nfp_prog->__prog_alloc_len = max_instr * sizeof(u64); in nfp_bpf_translate()
268 nfp_prog->prog = kvmalloc(nfp_prog->__prog_alloc_len, GFP_KERNEL); in nfp_bpf_translate()
269 if (!nfp_prog->prog) in nfp_bpf_translate()
272 err = nfp_bpf_jit(nfp_prog); in nfp_bpf_translate()
276 prog->aux->offload->jited_len = nfp_prog->prog_len * sizeof(u64); in nfp_bpf_translate()
277 prog->aux->offload->jited_image = nfp_prog->prog; in nfp_bpf_translate()
279 return nfp_map_ptrs_record(nfp_prog->bpf, nfp_prog, prog); in nfp_bpf_translate()
284 struct nfp_prog *nfp_prog = prog->aux->offload->dev_priv; in nfp_bpf_destroy() local
286 kvfree(nfp_prog->prog); in nfp_bpf_destroy()
287 nfp_map_ptrs_forget(nfp_prog->bpf, nfp_prog); in nfp_bpf_destroy()
288 nfp_prog_free(nfp_prog); in nfp_bpf_destroy()
512 struct nfp_prog *nfp_prog = prog->aux->offload->dev_priv; in nfp_net_bpf_load() local
524 img = nfp_bpf_relo_for_vnic(nfp_prog, nn->app_priv); in nfp_net_bpf_load()
529 nfp_prog->prog_len * sizeof(u64), in nfp_net_bpf_load()
536 nn_writew(nn, NFP_NET_CFG_BPF_SIZE, nfp_prog->prog_len); in nfp_net_bpf_load()
545 dma_unmap_single(nn->dp.dev, dma_addr, nfp_prog->prog_len * sizeof(u64), in nfp_net_bpf_load()