Lines Matching full:offload
21 /* Protects offdevs, members of bpf_offload_netdev and offload members
86 netdev_warn(netdev, "failed to register for BPF offload\n"); in __bpf_offload_dev_netdev_register()
101 struct bpf_prog_offload *offload = prog->aux->offload; in __bpf_prog_offload_destroy() local
103 if (offload->dev_state) in __bpf_prog_offload_destroy()
104 offload->offdev->ops->destroy(prog); in __bpf_prog_offload_destroy()
106 list_del_init(&offload->offloads); in __bpf_prog_offload_destroy()
107 kfree(offload); in __bpf_prog_offload_destroy()
108 prog->aux->offload = NULL; in __bpf_prog_offload_destroy()
141 struct bpf_prog_offload *offload, *ptmp; in __bpf_offload_dev_netdev_unregister() local
160 list_for_each_entry(offload, &ondev->progs, offloads) in __bpf_offload_dev_netdev_unregister()
161 offload->netdev = altdev->netdev; in __bpf_offload_dev_netdev_unregister()
168 list_for_each_entry_safe(offload, ptmp, &ondev->progs, offloads) in __bpf_offload_dev_netdev_unregister()
169 __bpf_prog_offload_destroy(offload->prog); in __bpf_offload_dev_netdev_unregister()
182 struct bpf_prog_offload *offload; in __bpf_prog_dev_bound_init() local
185 offload = kzalloc_obj(*offload, GFP_USER); in __bpf_prog_dev_bound_init()
186 if (!offload) in __bpf_prog_dev_bound_init()
189 offload->prog = prog; in __bpf_prog_dev_bound_init()
190 offload->netdev = netdev; in __bpf_prog_dev_bound_init()
192 ondev = bpf_offload_find_netdev(offload->netdev); in __bpf_prog_dev_bound_init()
204 err = __bpf_offload_dev_netdev_register(NULL, offload->netdev); in __bpf_prog_dev_bound_init()
207 ondev = bpf_offload_find_netdev(offload->netdev); in __bpf_prog_dev_bound_init()
209 offload->offdev = ondev->offdev; in __bpf_prog_dev_bound_init()
210 prog->aux->offload = offload; in __bpf_prog_dev_bound_init()
211 list_add_tail(&offload->offloads, &ondev->progs); in __bpf_prog_dev_bound_init()
215 kfree(offload); in __bpf_prog_dev_bound_init()
232 * if it is requesting bpf offload. in bpf_prog_dev_bound_init()
275 if (!old_prog->aux->offload) { in bpf_prog_dev_bound_inherit()
280 err = __bpf_prog_dev_bound_init(new_prog, old_prog->aux->offload->netdev); in bpf_prog_dev_bound_inherit()
289 struct bpf_prog_offload *offload; in bpf_prog_offload_verifier_prep() local
293 offload = prog->aux->offload; in bpf_prog_offload_verifier_prep()
294 if (offload) { in bpf_prog_offload_verifier_prep()
295 ret = offload->offdev->ops->prepare(prog); in bpf_prog_offload_verifier_prep()
296 offload->dev_state = !ret; in bpf_prog_offload_verifier_prep()
306 struct bpf_prog_offload *offload; in bpf_prog_offload_verify_insn() local
310 offload = env->prog->aux->offload; in bpf_prog_offload_verify_insn()
311 if (offload) in bpf_prog_offload_verify_insn()
312 ret = offload->offdev->ops->insn_hook(env, insn_idx, in bpf_prog_offload_verify_insn()
321 struct bpf_prog_offload *offload; in bpf_prog_offload_finalize() local
325 offload = env->prog->aux->offload; in bpf_prog_offload_finalize()
326 if (offload) { in bpf_prog_offload_finalize()
327 if (offload->offdev->ops->finalize) in bpf_prog_offload_finalize()
328 ret = offload->offdev->ops->finalize(env); in bpf_prog_offload_finalize()
342 struct bpf_prog_offload *offload; in bpf_prog_offload_replace_insn() local
346 offload = env->prog->aux->offload; in bpf_prog_offload_replace_insn()
347 if (offload) { in bpf_prog_offload_replace_insn()
348 ops = offload->offdev->ops; in bpf_prog_offload_replace_insn()
349 if (!offload->opt_failed && ops->replace_insn) in bpf_prog_offload_replace_insn()
351 offload->opt_failed |= ret; in bpf_prog_offload_replace_insn()
359 struct bpf_prog_offload *offload; in bpf_prog_offload_remove_insns() local
363 offload = env->prog->aux->offload; in bpf_prog_offload_remove_insns()
364 if (offload) { in bpf_prog_offload_remove_insns()
365 if (!offload->opt_failed && offload->offdev->ops->remove_insns) in bpf_prog_offload_remove_insns()
366 ret = offload->offdev->ops->remove_insns(env, off, cnt); in bpf_prog_offload_remove_insns()
367 offload->opt_failed |= ret; in bpf_prog_offload_remove_insns()
379 if (prog->aux->offload) { in bpf_prog_dev_bound_destroy()
380 list_del_init(&prog->aux->offload->offloads); in bpf_prog_dev_bound_destroy()
382 netdev = prog->aux->offload->netdev; in bpf_prog_dev_bound_destroy()
395 struct bpf_prog_offload *offload; in bpf_prog_offload_translate() local
399 offload = prog->aux->offload; in bpf_prog_offload_translate()
400 if (offload) in bpf_prog_offload_translate()
401 ret = offload->offdev->ops->translate(prog); in bpf_prog_offload_translate()
436 if (aux->offload) { in bpf_prog_offload_info_fill_ns()
437 args->info->ifindex = aux->offload->netdev->ifindex; in bpf_prog_offload_info_fill_ns()
438 net = dev_net(aux->offload->netdev); in bpf_prog_offload_info_fill_ns()
475 if (!aux->offload) { in bpf_prog_offload_info_fill()
481 info->jited_prog_len = aux->offload->jited_len; in bpf_prog_offload_info_fill()
485 if (copy_to_user(uinsns, aux->offload->jited_image, ulen)) { in bpf_prog_offload_info_fill()
693 struct bpf_prog_offload *offload; in __bpf_offload_dev_match() local
698 offload = prog->aux->offload; in __bpf_offload_dev_match()
699 if (!offload) in __bpf_offload_dev_match()
701 if (offload->netdev == netdev) in __bpf_offload_dev_match()
704 ondev1 = bpf_offload_find_netdev(offload->netdev); in __bpf_offload_dev_match()
730 ret = lhs->aux->offload && rhs->aux->offload && in bpf_prog_dev_bound_match()
731 lhs->aux->offload->netdev && in bpf_prog_dev_bound_match()
732 lhs->aux->offload->netdev == rhs->aux->offload->netdev; in bpf_prog_dev_bound_match()
845 if (!prog->aux->offload) in bpf_dev_bound_resolve_kfunc()
848 ops = prog->aux->offload->netdev->xdp_metadata_ops; in bpf_dev_bound_resolve_kfunc()