Lines Matching refs:ns

30 	struct netdevsim *ns;  member
41 struct netdevsim *ns; member
80 if (state->ns->bpf_bind_verifier_delay && !insn_idx) in nsim_bpf_verify_insn()
81 msleep(state->ns->bpf_bind_verifier_delay); in nsim_bpf_verify_insn()
93 static bool nsim_xdp_offload_active(struct netdevsim *ns) in nsim_xdp_offload_active() argument
95 return ns->xdp_hw.prog; in nsim_xdp_offload_active()
110 nsim_bpf_offload(struct netdevsim *ns, struct bpf_prog *prog, bool oldprog) in nsim_bpf_offload() argument
112 nsim_prog_set_loaded(ns->bpf_offloaded, false); in nsim_bpf_offload()
114 WARN(!!ns->bpf_offloaded != oldprog, in nsim_bpf_offload()
117 ns->bpf_offloaded = prog; in nsim_bpf_offload()
118 ns->bpf_offloaded_id = prog ? prog->aux->id : 0; in nsim_bpf_offload()
129 struct netdevsim *ns = cb_priv; in nsim_bpf_setup_tc_block_cb() local
138 if (!tc_cls_can_offload_and_chain0(ns->netdev, &cls_bpf->common)) in nsim_bpf_setup_tc_block_cb()
147 if (!ns->bpf_tc_accept) { in nsim_bpf_setup_tc_block_cb()
153 if (prog && !prog->aux->offload && !ns->bpf_tc_non_bound_accept) { in nsim_bpf_setup_tc_block_cb()
165 if (ns->bpf_offloaded != oldprog) { in nsim_bpf_setup_tc_block_cb()
169 if (ns->bpf_offloaded) { in nsim_bpf_setup_tc_block_cb()
176 return nsim_bpf_offload(ns, cls_bpf->prog, oldprog); in nsim_bpf_setup_tc_block_cb()
179 int nsim_bpf_disable_tc(struct netdevsim *ns) in nsim_bpf_disable_tc() argument
181 if (ns->bpf_offloaded && !nsim_xdp_offload_active(ns)) in nsim_bpf_disable_tc()
186 static int nsim_xdp_offload_prog(struct netdevsim *ns, struct netdev_bpf *bpf) in nsim_xdp_offload_prog() argument
188 if (!nsim_xdp_offload_active(ns) && !bpf->prog) in nsim_xdp_offload_prog()
190 if (!nsim_xdp_offload_active(ns) && bpf->prog && ns->bpf_offloaded) { in nsim_xdp_offload_prog()
195 return nsim_bpf_offload(ns, bpf->prog, nsim_xdp_offload_active(ns)); in nsim_xdp_offload_prog()
199 nsim_xdp_set_prog(struct netdevsim *ns, struct netdev_bpf *bpf, in nsim_xdp_set_prog() argument
207 if (bpf->command == XDP_SETUP_PROG && !ns->bpf_xdpdrv_accept) { in nsim_xdp_set_prog()
211 if (bpf->command == XDP_SETUP_PROG_HW && !ns->bpf_xdpoffload_accept) { in nsim_xdp_set_prog()
217 err = nsim_xdp_offload_prog(ns, bpf); in nsim_xdp_set_prog()
227 static int nsim_bpf_create_prog(struct netdevsim *ns, struct bpf_prog *prog) in nsim_bpf_create_prog() argument
236 state->ns = ns; in nsim_bpf_create_prog()
241 sprintf(name, "%u", ns->sdev->prog_id_gen++); in nsim_bpf_create_prog()
242 state->ddir = debugfs_create_dir(name, ns->sdev->ddir_bpf_bound_progs); in nsim_bpf_create_prog()
253 list_add_tail(&state->l, &ns->sdev->bpf_bound_progs); in nsim_bpf_create_prog()
272 static int nsim_setup_prog_checks(struct netdevsim *ns, struct netdev_bpf *bpf) in nsim_setup_prog_checks() argument
278 if (ns->netdev->mtu > NSIM_XDP_MAX_MTU) { in nsim_setup_prog_checks()
286 nsim_setup_prog_hw_checks(struct netdevsim *ns, struct netdev_bpf *bpf) in nsim_setup_prog_hw_checks() argument
297 if (!bpf_offload_dev_match(bpf->prog, ns->netdev)) { in nsim_setup_prog_hw_checks()
465 nsim_bpf_map_alloc(struct netdevsim *ns, struct bpf_offloaded_map *offmap) in nsim_bpf_map_alloc() argument
483 nmap->ns = ns; in nsim_bpf_map_alloc()
500 list_add_tail(&nmap->l, &ns->sdev->bpf_bound_maps); in nsim_bpf_map_alloc()
529 struct netdevsim *ns = netdev_priv(dev); in nsim_bpf() local
537 if (!ns->bpf_bind_accept) in nsim_bpf()
540 err = nsim_bpf_create_prog(ns, bpf->verifier.prog); in nsim_bpf()
555 return xdp_attachment_query(&ns->xdp, bpf); in nsim_bpf()
557 return xdp_attachment_query(&ns->xdp_hw, bpf); in nsim_bpf()
559 err = nsim_setup_prog_checks(ns, bpf); in nsim_bpf()
563 return nsim_xdp_set_prog(ns, bpf, &ns->xdp); in nsim_bpf()
565 err = nsim_setup_prog_hw_checks(ns, bpf); in nsim_bpf()
569 return nsim_xdp_set_prog(ns, bpf, &ns->xdp_hw); in nsim_bpf()
571 if (!ns->bpf_map_accept) in nsim_bpf()
574 return nsim_bpf_map_alloc(ns, bpf->offmap); in nsim_bpf()
583 int nsim_bpf_init(struct netdevsim *ns) in nsim_bpf_init() argument
587 if (ns->sdev->refcnt == 1) { in nsim_bpf_init()
588 INIT_LIST_HEAD(&ns->sdev->bpf_bound_progs); in nsim_bpf_init()
589 INIT_LIST_HEAD(&ns->sdev->bpf_bound_maps); in nsim_bpf_init()
591 ns->sdev->ddir_bpf_bound_progs = in nsim_bpf_init()
592 debugfs_create_dir("bpf_bound_progs", ns->sdev->ddir); in nsim_bpf_init()
593 if (IS_ERR_OR_NULL(ns->sdev->ddir_bpf_bound_progs)) in nsim_bpf_init()
596 ns->sdev->bpf_dev = bpf_offload_dev_create(); in nsim_bpf_init()
597 err = PTR_ERR_OR_ZERO(ns->sdev->bpf_dev); in nsim_bpf_init()
602 err = bpf_offload_dev_netdev_register(ns->sdev->bpf_dev, ns->netdev); in nsim_bpf_init()
606 debugfs_create_u32("bpf_offloaded_id", 0400, ns->ddir, in nsim_bpf_init()
607 &ns->bpf_offloaded_id); in nsim_bpf_init()
609 ns->bpf_bind_accept = true; in nsim_bpf_init()
610 debugfs_create_bool("bpf_bind_accept", 0600, ns->ddir, in nsim_bpf_init()
611 &ns->bpf_bind_accept); in nsim_bpf_init()
612 debugfs_create_u32("bpf_bind_verifier_delay", 0600, ns->ddir, in nsim_bpf_init()
613 &ns->bpf_bind_verifier_delay); in nsim_bpf_init()
615 ns->bpf_tc_accept = true; in nsim_bpf_init()
616 debugfs_create_bool("bpf_tc_accept", 0600, ns->ddir, in nsim_bpf_init()
617 &ns->bpf_tc_accept); in nsim_bpf_init()
618 debugfs_create_bool("bpf_tc_non_bound_accept", 0600, ns->ddir, in nsim_bpf_init()
619 &ns->bpf_tc_non_bound_accept); in nsim_bpf_init()
620 ns->bpf_xdpdrv_accept = true; in nsim_bpf_init()
621 debugfs_create_bool("bpf_xdpdrv_accept", 0600, ns->ddir, in nsim_bpf_init()
622 &ns->bpf_xdpdrv_accept); in nsim_bpf_init()
623 ns->bpf_xdpoffload_accept = true; in nsim_bpf_init()
624 debugfs_create_bool("bpf_xdpoffload_accept", 0600, ns->ddir, in nsim_bpf_init()
625 &ns->bpf_xdpoffload_accept); in nsim_bpf_init()
627 ns->bpf_map_accept = true; in nsim_bpf_init()
628 debugfs_create_bool("bpf_map_accept", 0600, ns->ddir, in nsim_bpf_init()
629 &ns->bpf_map_accept); in nsim_bpf_init()
634 if (ns->sdev->refcnt == 1) in nsim_bpf_init()
635 bpf_offload_dev_destroy(ns->sdev->bpf_dev); in nsim_bpf_init()
639 void nsim_bpf_uninit(struct netdevsim *ns) in nsim_bpf_uninit() argument
641 WARN_ON(ns->xdp.prog); in nsim_bpf_uninit()
642 WARN_ON(ns->xdp_hw.prog); in nsim_bpf_uninit()
643 WARN_ON(ns->bpf_offloaded); in nsim_bpf_uninit()
644 bpf_offload_dev_netdev_unregister(ns->sdev->bpf_dev, ns->netdev); in nsim_bpf_uninit()
646 if (ns->sdev->refcnt == 1) { in nsim_bpf_uninit()
647 WARN_ON(!list_empty(&ns->sdev->bpf_bound_progs)); in nsim_bpf_uninit()
648 WARN_ON(!list_empty(&ns->sdev->bpf_bound_maps)); in nsim_bpf_uninit()
649 bpf_offload_dev_destroy(ns->sdev->bpf_dev); in nsim_bpf_uninit()