Lines Matching +full:ns +full:-

5  * June 1991 as shown in the file COPYING in the top-level directory of this
42 struct netdevsim *ns = netdev_priv(dev); in nsim_start_peer_tx_queue() local
48 idx = rq->napi.index; in nsim_start_peer_tx_queue()
50 peer_ns = rcu_dereference(ns->peer); in nsim_start_peer_tx_queue()
55 peer_dev = peer_ns->netdev; in nsim_start_peer_tx_queue()
56 if (dev->real_num_tx_queues != peer_dev->num_rx_queues) in nsim_start_peer_tx_queue()
76 if (rx_dev->real_num_tx_queues != tx_dev->num_rx_queues) in nsim_stop_tx_queue()
81 NSIM_RING_SIZE - skb_queue_len(&rq->skb_queue), in nsim_stop_tx_queue()
88 if (skb_queue_len(&rq->skb_queue) > NSIM_RING_SIZE) { in nsim_napi_rx()
93 skb_queue_tail(&rq->skb_queue, skb); in nsim_napi_rx()
96 if (skb_queue_len(&rq->skb_queue) >= NSIM_RING_SIZE) in nsim_napi_rx()
114 struct netdevsim *ns = netdev_priv(dev); in nsim_start_xmit() local
116 unsigned int len = skb->len; in nsim_start_xmit()
123 if (!nsim_ipsec_tx(ns, skb)) in nsim_start_xmit()
126 peer_ns = rcu_dereference(ns->peer); in nsim_start_xmit()
130 peer_dev = peer_ns->netdev; in nsim_start_xmit()
132 if (rxq >= peer_dev->num_rx_queues) in nsim_start_xmit()
133 rxq = rxq % peer_dev->num_rx_queues; in nsim_start_xmit()
134 rq = peer_ns->rq[rxq]; in nsim_start_xmit()
136 cfg = peer_dev->cfg; in nsim_start_xmit()
138 (cfg->hds_config != ETHTOOL_TCP_DATA_SPLIT_ENABLED || in nsim_start_xmit()
139 (cfg->hds_config == ETHTOOL_TCP_DATA_SPLIT_ENABLED && in nsim_start_xmit()
140 cfg->hds_thresh > len))) in nsim_start_xmit()
147 if (!hrtimer_active(&rq->napi_timer)) in nsim_start_xmit()
148 hrtimer_start(&rq->napi_timer, us_to_ktime(5), HRTIMER_MODE_REL); in nsim_start_xmit()
168 struct netdevsim *ns = netdev_priv(dev); in nsim_change_mtu() local
170 if (ns->xdp.prog && !ns->xdp.prog->aux->xdp_has_frags && in nsim_change_mtu()
172 return -EBUSY; in nsim_change_mtu()
174 WRITE_ONCE(dev->mtu, new_mtu); in nsim_change_mtu()
187 struct netdevsim *ns = netdev_priv(dev); in nsim_set_vf_mac() local
188 struct nsim_dev *nsim_dev = ns->nsim_dev; in nsim_set_vf_mac()
192 return -EINVAL; in nsim_set_vf_mac()
193 memcpy(nsim_dev->vfconfigs[vf].vf_mac, mac, ETH_ALEN); in nsim_set_vf_mac()
201 struct netdevsim *ns = netdev_priv(dev); in nsim_set_vf_vlan() local
202 struct nsim_dev *nsim_dev = ns->nsim_dev; in nsim_set_vf_vlan()
205 return -EINVAL; in nsim_set_vf_vlan()
207 nsim_dev->vfconfigs[vf].vlan = vlan; in nsim_set_vf_vlan()
208 nsim_dev->vfconfigs[vf].qos = qos; in nsim_set_vf_vlan()
209 nsim_dev->vfconfigs[vf].vlan_proto = vlan_proto; in nsim_set_vf_vlan()
216 struct netdevsim *ns = netdev_priv(dev); in nsim_set_vf_rate() local
217 struct nsim_dev *nsim_dev = ns->nsim_dev; in nsim_set_vf_rate()
219 if (nsim_esw_mode_is_switchdev(ns->nsim_dev)) { in nsim_set_vf_rate()
221 return -EOPNOTSUPP; in nsim_set_vf_rate()
225 return -EINVAL; in nsim_set_vf_rate()
227 nsim_dev->vfconfigs[vf].min_tx_rate = min; in nsim_set_vf_rate()
228 nsim_dev->vfconfigs[vf].max_tx_rate = max; in nsim_set_vf_rate()
235 struct netdevsim *ns = netdev_priv(dev); in nsim_set_vf_spoofchk() local
236 struct nsim_dev *nsim_dev = ns->nsim_dev; in nsim_set_vf_spoofchk()
239 return -EINVAL; in nsim_set_vf_spoofchk()
240 nsim_dev->vfconfigs[vf].spoofchk_enabled = val; in nsim_set_vf_spoofchk()
247 struct netdevsim *ns = netdev_priv(dev); in nsim_set_vf_rss_query_en() local
248 struct nsim_dev *nsim_dev = ns->nsim_dev; in nsim_set_vf_rss_query_en()
251 return -EINVAL; in nsim_set_vf_rss_query_en()
252 nsim_dev->vfconfigs[vf].rss_query_enabled = val; in nsim_set_vf_rss_query_en()
259 struct netdevsim *ns = netdev_priv(dev); in nsim_set_vf_trust() local
260 struct nsim_dev *nsim_dev = ns->nsim_dev; in nsim_set_vf_trust()
263 return -EINVAL; in nsim_set_vf_trust()
264 nsim_dev->vfconfigs[vf].trusted = val; in nsim_set_vf_trust()
272 struct netdevsim *ns = netdev_priv(dev); in nsim_get_vf_config() local
273 struct nsim_dev *nsim_dev = ns->nsim_dev; in nsim_get_vf_config()
276 return -EINVAL; in nsim_get_vf_config()
278 ivi->vf = vf; in nsim_get_vf_config()
279 ivi->linkstate = nsim_dev->vfconfigs[vf].link_state; in nsim_get_vf_config()
280 ivi->min_tx_rate = nsim_dev->vfconfigs[vf].min_tx_rate; in nsim_get_vf_config()
281 ivi->max_tx_rate = nsim_dev->vfconfigs[vf].max_tx_rate; in nsim_get_vf_config()
282 ivi->vlan = nsim_dev->vfconfigs[vf].vlan; in nsim_get_vf_config()
283 ivi->vlan_proto = nsim_dev->vfconfigs[vf].vlan_proto; in nsim_get_vf_config()
284 ivi->qos = nsim_dev->vfconfigs[vf].qos; in nsim_get_vf_config()
285 memcpy(&ivi->mac, nsim_dev->vfconfigs[vf].vf_mac, ETH_ALEN); in nsim_get_vf_config()
286 ivi->spoofchk = nsim_dev->vfconfigs[vf].spoofchk_enabled; in nsim_get_vf_config()
287 ivi->trusted = nsim_dev->vfconfigs[vf].trusted; in nsim_get_vf_config()
288 ivi->rss_query_en = nsim_dev->vfconfigs[vf].rss_query_enabled; in nsim_get_vf_config()
295 struct netdevsim *ns = netdev_priv(dev); in nsim_set_vf_link_state() local
296 struct nsim_dev *nsim_dev = ns->nsim_dev; in nsim_set_vf_link_state()
299 return -EINVAL; in nsim_set_vf_link_state()
307 return -EINVAL; in nsim_set_vf_link_state()
310 nsim_dev->vfconfigs[vf].link_state = state; in nsim_set_vf_link_state()
317 stats->window_drops = 0; in nsim_taprio_stats()
318 stats->tx_overruns = 0; in nsim_taprio_stats()
326 switch (offload->cmd) { in nsim_setup_tc_taprio()
331 nsim_taprio_stats(&offload->stats); in nsim_setup_tc_taprio()
334 err = -EOPNOTSUPP; in nsim_setup_tc_taprio()
345 struct netdevsim *ns = netdev_priv(dev); in nsim_setup_tc() local
354 ns, ns, true); in nsim_setup_tc()
356 return -EOPNOTSUPP; in nsim_setup_tc()
363 struct netdevsim *ns = netdev_priv(dev); in nsim_set_features() local
365 if ((dev->features & NETIF_F_HW_TC) > (features & NETIF_F_HW_TC)) in nsim_set_features()
366 return nsim_bpf_disable_tc(ns); in nsim_set_features()
379 peer = rcu_dereference(nsim->peer); in nsim_get_iflink()
380 iflink = peer ? READ_ONCE(peer->netdev->ifindex) : in nsim_get_iflink()
381 READ_ONCE(dev->ifindex); in nsim_get_iflink()
389 struct net_device *dev = rq->napi.dev; in nsim_rcv()
391 struct netdevsim *ns; in nsim_rcv() local
396 ns = netdev_priv(dev); in nsim_rcv()
397 xdp_prog = READ_ONCE(ns->xdp.prog); in nsim_rcv()
400 if (skb_queue_empty(&rq->skb_queue)) in nsim_rcv()
403 skb = skb_dequeue(&rq->skb_queue); in nsim_rcv()
407 skblen = skb->len; in nsim_rcv()
409 if (skb->ip_summed == CHECKSUM_PARTIAL) in nsim_rcv()
419 skblen = skb->len; in nsim_rcv()
420 skb_mark_napi_id(skb, &rq->napi); in nsim_rcv()
450 .dev = &napi->dev->dev, in nsim_create_page_pool()
453 .netdev = napi->dev, in nsim_create_page_pool()
465 static int nsim_init_napi(struct netdevsim *ns) in nsim_init_napi() argument
467 struct net_device *dev = ns->netdev; in nsim_init_napi()
471 for (i = 0; i < dev->num_rx_queues; i++) { in nsim_init_napi()
472 rq = ns->rq[i]; in nsim_init_napi()
474 netif_napi_add_config_locked(dev, &rq->napi, nsim_poll, i); in nsim_init_napi()
477 for (i = 0; i < dev->num_rx_queues; i++) { in nsim_init_napi()
478 rq = ns->rq[i]; in nsim_init_napi()
480 err = nsim_create_page_pool(&rq->page_pool, &rq->napi); in nsim_init_napi()
488 while (i--) { in nsim_init_napi()
489 page_pool_destroy(ns->rq[i]->page_pool); in nsim_init_napi()
490 ns->rq[i]->page_pool = NULL; in nsim_init_napi()
493 for (i = 0; i < dev->num_rx_queues; i++) in nsim_init_napi()
494 __netif_napi_del_locked(&ns->rq[i]->napi); in nsim_init_napi()
504 napi_schedule(&rq->napi); in nsim_napi_schedule()
511 hrtimer_setup(&rq->napi_timer, nsim_napi_schedule, CLOCK_MONOTONIC, in nsim_rq_timer_init()
515 static void nsim_enable_napi(struct netdevsim *ns) in nsim_enable_napi() argument
517 struct net_device *dev = ns->netdev; in nsim_enable_napi()
520 for (i = 0; i < dev->num_rx_queues; i++) { in nsim_enable_napi()
521 struct nsim_rq *rq = ns->rq[i]; in nsim_enable_napi()
523 netif_queue_set_napi(dev, i, NETDEV_QUEUE_TYPE_RX, &rq->napi); in nsim_enable_napi()
524 napi_enable_locked(&rq->napi); in nsim_enable_napi()
530 struct netdevsim *ns = netdev_priv(dev); in nsim_open() local
535 err = nsim_init_napi(ns); in nsim_open()
539 nsim_enable_napi(ns); in nsim_open()
544 static void nsim_del_napi(struct netdevsim *ns) in nsim_del_napi() argument
546 struct net_device *dev = ns->netdev; in nsim_del_napi()
549 for (i = 0; i < dev->num_rx_queues; i++) { in nsim_del_napi()
550 struct nsim_rq *rq = ns->rq[i]; in nsim_del_napi()
552 napi_disable_locked(&rq->napi); in nsim_del_napi()
553 __netif_napi_del_locked(&rq->napi); in nsim_del_napi()
557 for (i = 0; i < dev->num_rx_queues; i++) { in nsim_del_napi()
558 page_pool_destroy(ns->rq[i]->page_pool); in nsim_del_napi()
559 ns->rq[i]->page_pool = NULL; in nsim_del_napi()
565 struct netdevsim *ns = netdev_priv(dev); in nsim_stop() local
571 peer = rtnl_dereference(ns->peer); in nsim_stop()
573 netif_carrier_off(peer->netdev); in nsim_stop()
575 nsim_del_napi(ns); in nsim_stop()
650 /* We don't have true per-queue stats, yet, so do some random fakery here.
661 stats->packets = rtstats.rx_packets - !!rtstats.rx_packets; in nsim_get_queue_stats_rx()
662 stats->bytes = rtstats.rx_bytes; in nsim_get_queue_stats_rx()
673 stats->packets = rtstats.tx_packets - !!rtstats.tx_packets; in nsim_get_queue_stats_tx()
674 stats->bytes = rtstats.tx_bytes; in nsim_get_queue_stats_tx()
685 rx->packets = !!rtstats.rx_packets; in nsim_get_base_stats()
686 rx->bytes = 0; in nsim_get_base_stats()
687 tx->packets = !!rtstats.tx_packets; in nsim_get_base_stats()
688 tx->bytes = 0; in nsim_get_base_stats()
705 skb_queue_head_init(&rq->skb_queue); in nsim_queue_alloc()
712 hrtimer_cancel(&rq->napi_timer); in nsim_queue_free()
714 if (rq->skb_queue.qlen) { in nsim_queue_free()
716 dev_dstats_rx_dropped_add(dev, rq->skb_queue.qlen); in nsim_queue_free()
720 skb_queue_purge_reason(&rq->skb_queue, SKB_DROP_REASON_QUEUE_PURGE); in nsim_queue_free()
724 /* Queue reset mode is controlled by ns->rq_reset_mode.
725 * - normal - new NAPI new pool (old NAPI enabled when new added)
726 * - mode 1 - allocate new pool (NAPI is only disabled / enabled)
727 * - mode 2 - new NAPI new pool (old NAPI removed before new added)
728 * - mode 3 - new NAPI new pool (old NAPI disabled when new added)
739 struct netdevsim *ns = netdev_priv(dev); in nsim_queue_mem_alloc() local
742 if (ns->rq_reset_mode > 3) in nsim_queue_mem_alloc()
743 return -EINVAL; in nsim_queue_mem_alloc()
745 if (ns->rq_reset_mode == 1) { in nsim_queue_mem_alloc()
746 if (!netif_running(ns->netdev)) in nsim_queue_mem_alloc()
747 return -ENETDOWN; in nsim_queue_mem_alloc()
748 return nsim_create_page_pool(&qmem->pp, &ns->rq[idx]->napi); in nsim_queue_mem_alloc()
751 qmem->rq = nsim_queue_alloc(); in nsim_queue_mem_alloc()
752 if (!qmem->rq) in nsim_queue_mem_alloc()
753 return -ENOMEM; in nsim_queue_mem_alloc()
755 err = nsim_create_page_pool(&qmem->rq->page_pool, &qmem->rq->napi); in nsim_queue_mem_alloc()
759 if (!ns->rq_reset_mode) in nsim_queue_mem_alloc()
760 netif_napi_add_config_locked(dev, &qmem->rq->napi, nsim_poll, in nsim_queue_mem_alloc()
766 nsim_queue_free(dev, qmem->rq); in nsim_queue_mem_alloc()
773 struct netdevsim *ns = netdev_priv(dev); in nsim_queue_mem_free() local
775 page_pool_destroy(qmem->pp); in nsim_queue_mem_free()
776 if (qmem->rq) { in nsim_queue_mem_free()
777 if (!ns->rq_reset_mode) in nsim_queue_mem_free()
778 netif_napi_del_locked(&qmem->rq->napi); in nsim_queue_mem_free()
779 page_pool_destroy(qmem->rq->page_pool); in nsim_queue_mem_free()
780 nsim_queue_free(dev, qmem->rq); in nsim_queue_mem_free()
788 struct netdevsim *ns = netdev_priv(dev); in nsim_queue_start() local
792 if (ns->rq_reset_mode == 1) { in nsim_queue_start()
793 ns->rq[idx]->page_pool = qmem->pp; in nsim_queue_start()
794 napi_enable_locked(&ns->rq[idx]->napi); in nsim_queue_start()
801 if (ns->rq_reset_mode == 2) { in nsim_queue_start()
802 netif_napi_del_locked(&ns->rq[idx]->napi); in nsim_queue_start()
803 netif_napi_add_config_locked(dev, &qmem->rq->napi, nsim_poll, in nsim_queue_start()
805 } else if (ns->rq_reset_mode == 3) { in nsim_queue_start()
806 netif_napi_add_config_locked(dev, &qmem->rq->napi, nsim_poll, in nsim_queue_start()
808 netif_napi_del_locked(&ns->rq[idx]->napi); in nsim_queue_start()
811 ns->rq[idx] = qmem->rq; in nsim_queue_start()
812 napi_enable_locked(&ns->rq[idx]->napi); in nsim_queue_start()
820 struct netdevsim *ns = netdev_priv(dev); in nsim_queue_stop() local
824 napi_disable_locked(&ns->rq[idx]->napi); in nsim_queue_stop()
826 if (ns->rq_reset_mode == 1) { in nsim_queue_stop()
827 qmem->pp = ns->rq[idx]->page_pool; in nsim_queue_stop()
828 page_pool_disable_direct_recycling(qmem->pp); in nsim_queue_stop()
830 qmem->rq = ns->rq[idx]; in nsim_queue_stop()
848 struct netdevsim *ns = file->private_data; in nsim_qreset_write() local
854 return -EINVAL; in nsim_qreset_write()
856 return -EFAULT; in nsim_qreset_write()
861 return -EINVAL; in nsim_qreset_write()
863 netdev_lock(ns->netdev); in nsim_qreset_write()
864 if (queue >= ns->netdev->real_num_rx_queues) { in nsim_qreset_write()
865 ret = -EINVAL; in nsim_qreset_write()
869 ns->rq_reset_mode = mode; in nsim_qreset_write()
870 ret = netdev_rx_queue_restart(ns->netdev, queue); in nsim_qreset_write()
871 ns->rq_reset_mode = 0; in nsim_qreset_write()
877 netdev_unlock(ns->netdev); in nsim_qreset_write()
891 struct netdevsim *ns = file->private_data; in nsim_pp_hold_read() local
894 if (ns->page) in nsim_pp_hold_read()
904 struct netdevsim *ns = file->private_data; in nsim_pp_hold_write() local
914 if (val == !!ns->page) in nsim_pp_hold_write()
917 if (!netif_running(ns->netdev) && val) { in nsim_pp_hold_write()
918 ret = -ENETDOWN; in nsim_pp_hold_write()
920 ns->page = page_pool_dev_alloc_pages(ns->rq[0]->page_pool); in nsim_pp_hold_write()
921 if (!ns->page) in nsim_pp_hold_write()
922 ret = -ENOMEM; in nsim_pp_hold_write()
924 page_pool_put_full_page(pp_page_to_nmdesc(ns->page)->pp, in nsim_pp_hold_write()
925 ns->page, false); in nsim_pp_hold_write()
926 ns->page = NULL; in nsim_pp_hold_write()
947 dev->flags &= ~IFF_MULTICAST; in nsim_setup()
948 dev->priv_flags |= IFF_LIVE_ADDR_CHANGE; in nsim_setup()
949 dev->features |= NETIF_F_HIGHDMA | in nsim_setup()
955 dev->hw_features |= NETIF_F_HW_TC | in nsim_setup()
961 dev->pcpu_stat_type = NETDEV_PCPU_STAT_DSTATS; in nsim_setup()
962 dev->max_mtu = ETH_MAX_MTU; in nsim_setup()
963 dev->xdp_features = NETDEV_XDP_ACT_BASIC | NETDEV_XDP_ACT_HW_OFFLOAD; in nsim_setup()
966 static int nsim_queue_init(struct netdevsim *ns) in nsim_queue_init() argument
968 struct net_device *dev = ns->netdev; in nsim_queue_init()
971 ns->rq = kcalloc(dev->num_rx_queues, sizeof(*ns->rq), in nsim_queue_init()
973 if (!ns->rq) in nsim_queue_init()
974 return -ENOMEM; in nsim_queue_init()
976 for (i = 0; i < dev->num_rx_queues; i++) { in nsim_queue_init()
977 ns->rq[i] = nsim_queue_alloc(); in nsim_queue_init()
978 if (!ns->rq[i]) in nsim_queue_init()
985 while (i--) in nsim_queue_init()
986 kfree(ns->rq[i]); in nsim_queue_init()
987 kfree(ns->rq); in nsim_queue_init()
988 return -ENOMEM; in nsim_queue_init()
991 static void nsim_queue_uninit(struct netdevsim *ns) in nsim_queue_uninit() argument
993 struct net_device *dev = ns->netdev; in nsim_queue_uninit()
996 for (i = 0; i < dev->num_rx_queues; i++) in nsim_queue_uninit()
997 nsim_queue_free(dev, ns->rq[i]); in nsim_queue_uninit()
999 kfree(ns->rq); in nsim_queue_uninit()
1000 ns->rq = NULL; in nsim_queue_uninit()
1003 static int nsim_init_netdevsim(struct netdevsim *ns) in nsim_init_netdevsim() argument
1008 phc = mock_phc_create(&ns->nsim_bus_dev->dev); in nsim_init_netdevsim()
1012 ns->phc = phc; in nsim_init_netdevsim()
1013 ns->netdev->netdev_ops = &nsim_netdev_ops; in nsim_init_netdevsim()
1014 ns->netdev->stat_ops = &nsim_stat_ops; in nsim_init_netdevsim()
1015 ns->netdev->queue_mgmt_ops = &nsim_queue_mgmt_ops; in nsim_init_netdevsim()
1016 netdev_lockdep_set_classes(ns->netdev); in nsim_init_netdevsim()
1018 err = nsim_udp_tunnels_info_create(ns->nsim_dev, ns->netdev); in nsim_init_netdevsim()
1023 err = nsim_queue_init(ns); in nsim_init_netdevsim()
1027 err = nsim_bpf_init(ns); in nsim_init_netdevsim()
1031 nsim_macsec_init(ns); in nsim_init_netdevsim()
1032 nsim_ipsec_init(ns); in nsim_init_netdevsim()
1034 err = register_netdevice(ns->netdev); in nsim_init_netdevsim()
1040 ns->nb.notifier_call = netdev_debug_event; in nsim_init_netdevsim()
1041 if (register_netdevice_notifier_dev_net(ns->netdev, &ns->nb, in nsim_init_netdevsim()
1042 &ns->nn)) in nsim_init_netdevsim()
1043 ns->nb.notifier_call = NULL; in nsim_init_netdevsim()
1049 nsim_ipsec_teardown(ns); in nsim_init_netdevsim()
1050 nsim_macsec_teardown(ns); in nsim_init_netdevsim()
1051 nsim_bpf_uninit(ns); in nsim_init_netdevsim()
1053 nsim_queue_uninit(ns); in nsim_init_netdevsim()
1056 nsim_udp_tunnels_info_destroy(ns->netdev); in nsim_init_netdevsim()
1058 mock_phc_destroy(ns->phc); in nsim_init_netdevsim()
1062 static int nsim_init_netdevsim_vf(struct netdevsim *ns) in nsim_init_netdevsim_vf() argument
1066 ns->netdev->netdev_ops = &nsim_vf_netdev_ops; in nsim_init_netdevsim_vf()
1068 err = register_netdevice(ns->netdev); in nsim_init_netdevsim_vf()
1073 static void nsim_exit_netdevsim(struct netdevsim *ns) in nsim_exit_netdevsim() argument
1075 nsim_udp_tunnels_info_destroy(ns->netdev); in nsim_exit_netdevsim()
1076 mock_phc_destroy(ns->phc); in nsim_exit_netdevsim()
1084 struct netdevsim *ns; in nsim_create() local
1087 dev = alloc_netdev_mq(sizeof(*ns), "eth%d", NET_NAME_UNKNOWN, nsim_setup, in nsim_create()
1088 nsim_dev->nsim_bus_dev->num_queues); in nsim_create()
1090 return ERR_PTR(-ENOMEM); in nsim_create()
1093 memcpy(dev->perm_addr, perm_addr, ETH_ALEN); in nsim_create()
1096 ns = netdev_priv(dev); in nsim_create()
1097 ns->netdev = dev; in nsim_create()
1098 ns->nsim_dev = nsim_dev; in nsim_create()
1099 ns->nsim_dev_port = nsim_dev_port; in nsim_create()
1100 ns->nsim_bus_dev = nsim_dev->nsim_bus_dev; in nsim_create()
1101 SET_NETDEV_DEV(dev, &ns->nsim_bus_dev->dev); in nsim_create()
1102 SET_NETDEV_DEVLINK_PORT(dev, &nsim_dev_port->devlink_port); in nsim_create()
1103 nsim_ethtool_init(ns); in nsim_create()
1105 err = nsim_init_netdevsim(ns); in nsim_create()
1107 err = nsim_init_netdevsim_vf(ns); in nsim_create()
1111 ns->pp_dfs = debugfs_create_file("pp_hold", 0600, nsim_dev_port->ddir, in nsim_create()
1112 ns, &nsim_pp_hold_fops); in nsim_create()
1113 ns->qr_dfs = debugfs_create_file("queue_reset", 0200, in nsim_create()
1114 nsim_dev_port->ddir, ns, in nsim_create()
1116 return ns; in nsim_create()
1123 void nsim_destroy(struct netdevsim *ns) in nsim_destroy() argument
1125 struct net_device *dev = ns->netdev; in nsim_destroy()
1128 debugfs_remove(ns->qr_dfs); in nsim_destroy()
1129 debugfs_remove(ns->pp_dfs); in nsim_destroy()
1131 if (ns->nb.notifier_call) in nsim_destroy()
1132 unregister_netdevice_notifier_dev_net(ns->netdev, &ns->nb, in nsim_destroy()
1133 &ns->nn); in nsim_destroy()
1136 peer = rtnl_dereference(ns->peer); in nsim_destroy()
1138 RCU_INIT_POINTER(peer->peer, NULL); in nsim_destroy()
1139 RCU_INIT_POINTER(ns->peer, NULL); in nsim_destroy()
1141 if (nsim_dev_port_is_pf(ns->nsim_dev_port)) { in nsim_destroy()
1142 nsim_macsec_teardown(ns); in nsim_destroy()
1143 nsim_ipsec_teardown(ns); in nsim_destroy()
1144 nsim_bpf_uninit(ns); in nsim_destroy()
1145 nsim_queue_uninit(ns); in nsim_destroy()
1148 if (nsim_dev_port_is_pf(ns->nsim_dev_port)) in nsim_destroy()
1149 nsim_exit_netdevsim(ns); in nsim_destroy()
1152 if (ns->page) { in nsim_destroy()
1153 page_pool_put_full_page(pp_page_to_nmdesc(ns->page)->pp, in nsim_destroy()
1154 ns->page, false); in nsim_destroy()
1155 ns->page = NULL; in nsim_destroy()
1163 return dev->netdev_ops == &nsim_netdev_ops; in netdev_is_nsim()
1171 return -EOPNOTSUPP; in nsim_validate()