Lines Matching refs:nfp_prog

31 nfp_map_ptr_record(struct nfp_app_bpf *bpf, struct nfp_prog *nfp_prog,  in nfp_map_ptr_record()  argument
41 nfp_prog->map_records[nfp_prog->map_records_cnt++] = record; in nfp_map_ptr_record()
66 nfp_prog->map_records[nfp_prog->map_records_cnt++] = record; in nfp_map_ptr_record()
78 nfp_map_ptrs_forget(struct nfp_app_bpf *bpf, struct nfp_prog *nfp_prog) in nfp_map_ptrs_forget() argument
83 for (i = 0; i < nfp_prog->map_records_cnt; i++) { in nfp_map_ptrs_forget()
84 if (--nfp_prog->map_records[i]->count) { in nfp_map_ptrs_forget()
85 nfp_prog->map_records[i] = NULL; in nfp_map_ptrs_forget()
90 &nfp_prog->map_records[i]->l, in nfp_map_ptrs_forget()
98 for (i = 0; i < nfp_prog->map_records_cnt; i++) in nfp_map_ptrs_forget()
99 if (nfp_prog->map_records[i]) { in nfp_map_ptrs_forget()
100 bpf_map_put(nfp_prog->map_records[i]->ptr); in nfp_map_ptrs_forget()
101 kfree(nfp_prog->map_records[i]); in nfp_map_ptrs_forget()
105 kfree(nfp_prog->map_records); in nfp_map_ptrs_forget()
106 nfp_prog->map_records = NULL; in nfp_map_ptrs_forget()
107 nfp_prog->map_records_cnt = 0; in nfp_map_ptrs_forget()
111 nfp_map_ptrs_record(struct nfp_app_bpf *bpf, struct nfp_prog *nfp_prog, in nfp_map_ptrs_record() argument
126 nfp_prog->map_records = kmalloc_array(cnt, in nfp_map_ptrs_record()
127 sizeof(nfp_prog->map_records[0]), in nfp_map_ptrs_record()
129 if (!nfp_prog->map_records) { in nfp_map_ptrs_record()
136 err = nfp_map_ptr_record(bpf, nfp_prog, in nfp_map_ptrs_record()
139 nfp_map_ptrs_forget(bpf, nfp_prog); in nfp_map_ptrs_record()
143 WARN_ON(cnt != nfp_prog->map_records_cnt); in nfp_map_ptrs_record()
151 nfp_prog_prepare(struct nfp_prog *nfp_prog, const struct bpf_insn *prog, in nfp_prog_prepare() argument
169 list_add_tail(&meta->l, &nfp_prog->insns); in nfp_prog_prepare()
171 nfp_prog->n_insns = cnt; in nfp_prog_prepare()
173 nfp_bpf_jit_prepare(nfp_prog); in nfp_prog_prepare()
178 static void nfp_prog_free(struct nfp_prog *nfp_prog) in nfp_prog_free() argument
182 kfree(nfp_prog->subprog); in nfp_prog_free()
184 list_for_each_entry_safe(meta, tmp, &nfp_prog->insns, l) { in nfp_prog_free()
188 kfree(nfp_prog); in nfp_prog_free()
193 struct nfp_prog *nfp_prog; in nfp_bpf_verifier_prep() local
196 nfp_prog = kzalloc(sizeof(*nfp_prog), GFP_KERNEL); in nfp_bpf_verifier_prep()
197 if (!nfp_prog) in nfp_bpf_verifier_prep()
199 prog->aux->offload->dev_priv = nfp_prog; in nfp_bpf_verifier_prep()
201 INIT_LIST_HEAD(&nfp_prog->insns); in nfp_bpf_verifier_prep()
202 nfp_prog->type = prog->type; in nfp_bpf_verifier_prep()
203 nfp_prog->bpf = bpf_offload_dev_priv(prog->aux->offload->offdev); in nfp_bpf_verifier_prep()
205 ret = nfp_prog_prepare(nfp_prog, prog->insnsi, prog->len); in nfp_bpf_verifier_prep()
209 nfp_prog->verifier_meta = nfp_prog_first_meta(nfp_prog); in nfp_bpf_verifier_prep()
214 nfp_prog_free(nfp_prog); in nfp_bpf_verifier_prep()
222 struct nfp_prog *nfp_prog = prog->aux->offload->dev_priv; in nfp_bpf_translate() local
231 nfp_prog->__prog_alloc_len = max_instr * sizeof(u64); in nfp_bpf_translate()
233 nfp_prog->prog = kvmalloc(nfp_prog->__prog_alloc_len, GFP_KERNEL); in nfp_bpf_translate()
234 if (!nfp_prog->prog) in nfp_bpf_translate()
237 err = nfp_bpf_jit(nfp_prog); in nfp_bpf_translate()
241 prog->aux->offload->jited_len = nfp_prog->prog_len * sizeof(u64); in nfp_bpf_translate()
242 prog->aux->offload->jited_image = nfp_prog->prog; in nfp_bpf_translate()
244 return nfp_map_ptrs_record(nfp_prog->bpf, nfp_prog, prog); in nfp_bpf_translate()
249 struct nfp_prog *nfp_prog = prog->aux->offload->dev_priv; in nfp_bpf_destroy() local
251 kvfree(nfp_prog->prog); in nfp_bpf_destroy()
252 nfp_map_ptrs_forget(nfp_prog->bpf, nfp_prog); in nfp_bpf_destroy()
253 nfp_prog_free(nfp_prog); in nfp_bpf_destroy()
499 struct nfp_prog *nfp_prog = prog->aux->offload->dev_priv; in nfp_net_bpf_load() local
511 if (nfp_prog->stack_size > max_stack) { in nfp_net_bpf_load()
517 if (nfp_prog->prog_len > max_prog_len) { in nfp_net_bpf_load()
522 img = nfp_bpf_relo_for_vnic(nfp_prog, nn->app_priv); in nfp_net_bpf_load()
527 nfp_prog->prog_len * sizeof(u64), in nfp_net_bpf_load()
534 nn_writew(nn, NFP_NET_CFG_BPF_SIZE, nfp_prog->prog_len); in nfp_net_bpf_load()
543 dma_unmap_single(nn->dp.dev, dma_addr, nfp_prog->prog_len * sizeof(u64), in nfp_net_bpf_load()