Lines Matching full:offload
31 /* Protects offdevs, members of bpf_offload_netdev and offload members
96 netdev_warn(netdev, "failed to register for BPF offload\n"); in __bpf_offload_dev_netdev_register()
111 struct bpf_prog_offload *offload = prog->aux->offload; in __bpf_prog_offload_destroy() local
113 if (offload->dev_state) in __bpf_prog_offload_destroy()
114 offload->offdev->ops->destroy(prog); in __bpf_prog_offload_destroy()
116 list_del_init(&offload->offloads); in __bpf_prog_offload_destroy()
117 kfree(offload); in __bpf_prog_offload_destroy()
118 prog->aux->offload = NULL; in __bpf_prog_offload_destroy()
151 struct bpf_prog_offload *offload, *ptmp; in __bpf_offload_dev_netdev_unregister() local
170 list_for_each_entry(offload, &ondev->progs, offloads) in __bpf_offload_dev_netdev_unregister()
171 offload->netdev = altdev->netdev; in __bpf_offload_dev_netdev_unregister()
178 list_for_each_entry_safe(offload, ptmp, &ondev->progs, offloads) in __bpf_offload_dev_netdev_unregister()
179 __bpf_prog_offload_destroy(offload->prog); in __bpf_offload_dev_netdev_unregister()
192 struct bpf_prog_offload *offload; in __bpf_prog_dev_bound_init() local
195 offload = kzalloc(sizeof(*offload), GFP_USER); in __bpf_prog_dev_bound_init()
196 if (!offload) in __bpf_prog_dev_bound_init()
199 offload->prog = prog; in __bpf_prog_dev_bound_init()
200 offload->netdev = netdev; in __bpf_prog_dev_bound_init()
202 ondev = bpf_offload_find_netdev(offload->netdev); in __bpf_prog_dev_bound_init()
214 err = __bpf_offload_dev_netdev_register(NULL, offload->netdev); in __bpf_prog_dev_bound_init()
217 ondev = bpf_offload_find_netdev(offload->netdev); in __bpf_prog_dev_bound_init()
219 offload->offdev = ondev->offdev; in __bpf_prog_dev_bound_init()
220 prog->aux->offload = offload; in __bpf_prog_dev_bound_init()
221 list_add_tail(&offload->offloads, &ondev->progs); in __bpf_prog_dev_bound_init()
225 kfree(offload); in __bpf_prog_dev_bound_init()
242 * if it is requesting bpf offload. in bpf_prog_dev_bound_init()
285 if (!old_prog->aux->offload) { in bpf_prog_dev_bound_inherit()
290 err = __bpf_prog_dev_bound_init(new_prog, old_prog->aux->offload->netdev); in bpf_prog_dev_bound_inherit()
299 struct bpf_prog_offload *offload; in bpf_prog_offload_verifier_prep() local
303 offload = prog->aux->offload; in bpf_prog_offload_verifier_prep()
304 if (offload) { in bpf_prog_offload_verifier_prep()
305 ret = offload->offdev->ops->prepare(prog); in bpf_prog_offload_verifier_prep()
306 offload->dev_state = !ret; in bpf_prog_offload_verifier_prep()
316 struct bpf_prog_offload *offload; in bpf_prog_offload_verify_insn() local
320 offload = env->prog->aux->offload; in bpf_prog_offload_verify_insn()
321 if (offload) in bpf_prog_offload_verify_insn()
322 ret = offload->offdev->ops->insn_hook(env, insn_idx, in bpf_prog_offload_verify_insn()
331 struct bpf_prog_offload *offload; in bpf_prog_offload_finalize() local
335 offload = env->prog->aux->offload; in bpf_prog_offload_finalize()
336 if (offload) { in bpf_prog_offload_finalize()
337 if (offload->offdev->ops->finalize) in bpf_prog_offload_finalize()
338 ret = offload->offdev->ops->finalize(env); in bpf_prog_offload_finalize()
352 struct bpf_prog_offload *offload; in bpf_prog_offload_replace_insn() local
356 offload = env->prog->aux->offload; in bpf_prog_offload_replace_insn()
357 if (offload) { in bpf_prog_offload_replace_insn()
358 ops = offload->offdev->ops; in bpf_prog_offload_replace_insn()
359 if (!offload->opt_failed && ops->replace_insn) in bpf_prog_offload_replace_insn()
361 offload->opt_failed |= ret; in bpf_prog_offload_replace_insn()
369 struct bpf_prog_offload *offload; in bpf_prog_offload_remove_insns() local
373 offload = env->prog->aux->offload; in bpf_prog_offload_remove_insns()
374 if (offload) { in bpf_prog_offload_remove_insns()
375 if (!offload->opt_failed && offload->offdev->ops->remove_insns) in bpf_prog_offload_remove_insns()
376 ret = offload->offdev->ops->remove_insns(env, off, cnt); in bpf_prog_offload_remove_insns()
377 offload->opt_failed |= ret; in bpf_prog_offload_remove_insns()
389 if (prog->aux->offload) { in bpf_prog_dev_bound_destroy()
390 list_del_init(&prog->aux->offload->offloads); in bpf_prog_dev_bound_destroy()
392 netdev = prog->aux->offload->netdev; in bpf_prog_dev_bound_destroy()
405 struct bpf_prog_offload *offload; in bpf_prog_offload_translate() local
409 offload = prog->aux->offload; in bpf_prog_offload_translate()
410 if (offload) in bpf_prog_offload_translate()
411 ret = offload->offdev->ops->translate(prog); in bpf_prog_offload_translate()
446 if (aux->offload) { in bpf_prog_offload_info_fill_ns()
447 args->info->ifindex = aux->offload->netdev->ifindex; in bpf_prog_offload_info_fill_ns()
448 net = dev_net(aux->offload->netdev); in bpf_prog_offload_info_fill_ns()
485 if (!aux->offload) { in bpf_prog_offload_info_fill()
491 info->jited_prog_len = aux->offload->jited_len; in bpf_prog_offload_info_fill()
495 if (copy_to_user(uinsns, aux->offload->jited_image, ulen)) { in bpf_prog_offload_info_fill()
703 struct bpf_prog_offload *offload; in __bpf_offload_dev_match() local
708 offload = prog->aux->offload; in __bpf_offload_dev_match()
709 if (!offload) in __bpf_offload_dev_match()
711 if (offload->netdev == netdev) in __bpf_offload_dev_match()
714 ondev1 = bpf_offload_find_netdev(offload->netdev); in __bpf_offload_dev_match()
740 ret = lhs->aux->offload && rhs->aux->offload && in bpf_prog_dev_bound_match()
741 lhs->aux->offload->netdev && in bpf_prog_dev_bound_match()
742 lhs->aux->offload->netdev == rhs->aux->offload->netdev; in bpf_prog_dev_bound_match()
855 if (!prog->aux->offload) in bpf_dev_bound_resolve_kfunc()
858 ops = prog->aux->offload->netdev->xdp_metadata_ops; in bpf_dev_bound_resolve_kfunc()