Lines Matching refs:vf_netdev

69 	struct net_device *vf_netdev = rtnl_dereference(ndev_ctx->vf_netdev);  in netvsc_change_rx_flags()  local
72 if (!vf_netdev) in netvsc_change_rx_flags()
77 dev_set_promiscuity(vf_netdev, inc); in netvsc_change_rx_flags()
82 dev_set_allmulti(vf_netdev, inc); in netvsc_change_rx_flags()
89 struct net_device *vf_netdev; in netvsc_set_rx_mode() local
93 vf_netdev = rcu_dereference(ndev_ctx->vf_netdev); in netvsc_set_rx_mode()
94 if (vf_netdev) { in netvsc_set_rx_mode()
95 dev_uc_sync(vf_netdev, net); in netvsc_set_rx_mode()
96 dev_mc_sync(vf_netdev, net); in netvsc_set_rx_mode()
117 struct net_device *vf_netdev = rtnl_dereference(ndev_ctx->vf_netdev); in netvsc_open() local
137 if (vf_netdev) { in netvsc_open()
142 ret = dev_open(vf_netdev, NULL); in netvsc_open()
146 vf_netdev->name, ret); in netvsc_open()
203 struct net_device *vf_netdev in netvsc_close() local
204 = rtnl_dereference(net_device_ctx->vf_netdev); in netvsc_close()
224 if (vf_netdev) in netvsc_close()
225 dev_close(vf_netdev); in netvsc_close()
300 struct net_device *vf_netdev; in netvsc_select_queue() local
304 vf_netdev = rcu_dereference(ndc->vf_netdev); in netvsc_select_queue()
305 if (vf_netdev) { in netvsc_select_queue()
306 const struct net_device_ops *vf_ops = vf_netdev->netdev_ops; in netvsc_select_queue()
309 txq = vf_ops->ndo_select_queue(vf_netdev, skb, sb_dev); in netvsc_select_queue()
311 txq = netdev_pick_tx(vf_netdev, skb, NULL); in netvsc_select_queue()
416 static int netvsc_vf_xmit(struct net_device *net, struct net_device *vf_netdev, in netvsc_vf_xmit() argument
423 skb->dev = vf_netdev; in netvsc_vf_xmit()
449 struct net_device *vf_netdev; in netvsc_xmit() local
458 vf_netdev = rcu_dereference_bh(net_device_ctx->vf_netdev); in netvsc_xmit()
459 if (vf_netdev && netif_running(vf_netdev) && in netvsc_xmit()
460 netif_carrier_ok(vf_netdev) && !netpoll_tx_running(net) && in netvsc_xmit()
462 return netvsc_vf_xmit(net, vf_netdev, skb); in netvsc_xmit()
1144 struct net_device *vf_netdev; in netvsc_get_link_ksettings() local
1146 vf_netdev = rtnl_dereference(ndc->vf_netdev); in netvsc_get_link_ksettings()
1148 if (vf_netdev) in netvsc_get_link_ksettings()
1149 return __ethtool_get_link_ksettings(vf_netdev, cmd); in netvsc_get_link_ksettings()
1162 struct net_device *vf_netdev = rtnl_dereference(ndc->vf_netdev); in netvsc_set_link_ksettings() local
1164 if (vf_netdev) { in netvsc_set_link_ksettings()
1165 if (!vf_netdev->ethtool_ops->set_link_ksettings) in netvsc_set_link_ksettings()
1168 return vf_netdev->ethtool_ops->set_link_ksettings(vf_netdev, in netvsc_set_link_ksettings()
1179 struct net_device *vf_netdev = rtnl_dereference(ndevctx->vf_netdev); in netvsc_change_mtu() local
1194 if (vf_netdev) { in netvsc_change_mtu()
1195 ret = dev_set_mtu(vf_netdev, mtu); in netvsc_change_mtu()
1216 if (vf_netdev) in netvsc_change_mtu()
1217 dev_set_mtu(vf_netdev, orig_mtu); in netvsc_change_mtu()
1372 struct net_device *vf_netdev = rtnl_dereference(ndc->vf_netdev); in netvsc_set_mac_addr() local
1384 if (vf_netdev) { in netvsc_set_mac_addr()
1385 err = dev_set_mac_address(vf_netdev, addr, NULL); in netvsc_set_mac_addr()
1393 } else if (vf_netdev) { in netvsc_set_mac_addr()
1396 dev_set_mac_address(vf_netdev, addr, NULL); in netvsc_set_mac_addr()
1887 struct net_device *vf_netdev = rtnl_dereference(ndevctx->vf_netdev); in netvsc_set_features() local
1915 if (!vf_netdev) in netvsc_set_features()
1918 vf_netdev->wanted_features = features; in netvsc_set_features()
1919 netdev_update_features(vf_netdev); in netvsc_set_features()
2103 static struct net_device *get_netvsc_byref(struct net_device *vf_netdev) in get_netvsc_byref() argument
2108 dev = netdev_master_upper_dev_get(vf_netdev); in get_netvsc_byref()
2147 static int netvsc_vf_join(struct net_device *vf_netdev, in netvsc_vf_join() argument
2153 ret = netdev_rx_handler_register(vf_netdev, in netvsc_vf_join()
2156 netdev_err(vf_netdev, in netvsc_vf_join()
2162 ret = netdev_master_upper_dev_link(vf_netdev, ndev, in netvsc_vf_join()
2165 netdev_err(vf_netdev, in netvsc_vf_join()
2177 call_netdevice_notifiers(NETDEV_JOIN, vf_netdev); in netvsc_vf_join()
2179 netdev_info(vf_netdev, "joined to %s\n", ndev->name); in netvsc_vf_join()
2183 netdev_rx_handler_unregister(vf_netdev); in netvsc_vf_join()
2189 struct net_device *vf_netdev) in __netvsc_vf_setup() argument
2194 ret = dev_set_mtu(vf_netdev, ndev->mtu); in __netvsc_vf_setup()
2196 netdev_warn(vf_netdev, in __netvsc_vf_setup()
2200 dev_change_flags(vf_netdev, ndev->flags | IFF_SLAVE, NULL); in __netvsc_vf_setup()
2204 dev_uc_sync(vf_netdev, ndev); in __netvsc_vf_setup()
2205 dev_mc_sync(vf_netdev, ndev); in __netvsc_vf_setup()
2209 ret = dev_open(vf_netdev, NULL); in __netvsc_vf_setup()
2211 netdev_warn(vf_netdev, in __netvsc_vf_setup()
2224 struct net_device *vf_netdev; in netvsc_vf_setup() local
2231 vf_netdev = rtnl_dereference(ndev_ctx->vf_netdev); in netvsc_vf_setup()
2232 if (vf_netdev) in netvsc_vf_setup()
2233 __netvsc_vf_setup(ndev, vf_netdev); in netvsc_vf_setup()
2241 static struct net_device *get_netvsc_byslot(const struct net_device *vf_netdev) in get_netvsc_byslot() argument
2243 struct device *parent = vf_netdev->dev.parent; in get_netvsc_byslot()
2254 netdev_notice(vf_netdev, "no PCI slot information\n"); in get_netvsc_byslot()
2259 netdev_notice(vf_netdev, "Invalid vf serial:%s\n", in get_netvsc_byslot()
2272 if (ndev->addr_len != vf_netdev->addr_len || in get_netvsc_byslot()
2273 memcmp(ndev->perm_addr, vf_netdev->perm_addr, in get_netvsc_byslot()
2290 if (ether_addr_equal(vf_netdev->perm_addr, ndev->perm_addr) || in get_netvsc_byslot()
2291 ether_addr_equal(vf_netdev->dev_addr, ndev->perm_addr)) in get_netvsc_byslot()
2295 netdev_notice(vf_netdev, in get_netvsc_byslot()
2300 static int netvsc_prepare_bonding(struct net_device *vf_netdev) in netvsc_prepare_bonding() argument
2304 ndev = get_netvsc_byslot(vf_netdev); in netvsc_prepare_bonding()
2311 vf_netdev->flags |= IFF_SLAVE; in netvsc_prepare_bonding()
2312 vf_netdev->priv_flags |= IFF_NO_ADDRCONF; in netvsc_prepare_bonding()
2316 static int netvsc_register_vf(struct net_device *vf_netdev, int context) in netvsc_register_vf() argument
2324 if (vf_netdev->addr_len != ETH_ALEN) in netvsc_register_vf()
2327 ndev = get_netvsc_byslot(vf_netdev); in netvsc_register_vf()
2333 if (!netvsc_dev || rtnl_dereference(net_device_ctx->vf_netdev)) in netvsc_register_vf()
2340 if (!net_eq(dev_net(ndev), dev_net(vf_netdev))) { in netvsc_register_vf()
2341 ret = dev_change_net_namespace(vf_netdev, in netvsc_register_vf()
2344 netdev_err(vf_netdev, in netvsc_register_vf()
2348 netdev_info(vf_netdev, in netvsc_register_vf()
2354 netdev_info(ndev, "VF registering: %s\n", vf_netdev->name); in netvsc_register_vf()
2356 if (netvsc_vf_join(vf_netdev, ndev, context) != 0) in netvsc_register_vf()
2359 dev_hold(vf_netdev); in netvsc_register_vf()
2360 rcu_assign_pointer(net_device_ctx->vf_netdev, vf_netdev); in netvsc_register_vf()
2362 if (ndev->needed_headroom < vf_netdev->needed_headroom) in netvsc_register_vf()
2363 ndev->needed_headroom = vf_netdev->needed_headroom; in netvsc_register_vf()
2365 vf_netdev->wanted_features = ndev->features; in netvsc_register_vf()
2366 netdev_update_features(vf_netdev); in netvsc_register_vf()
2369 netvsc_vf_setxdp(vf_netdev, prog); in netvsc_register_vf()
2384 static int netvsc_vf_changed(struct net_device *vf_netdev, unsigned long event) in netvsc_vf_changed() argument
2393 vf_is_up = netif_running(vf_netdev); in netvsc_vf_changed()
2395 ndev = get_netvsc_byref(vf_netdev); in netvsc_vf_changed()
2417 vf_is_up ? "to" : "from", vf_netdev->name, ret); in netvsc_vf_changed()
2421 vf_is_up ? "to" : "from", vf_netdev->name); in netvsc_vf_changed()
2434 netif_set_tso_max_size(ndev, vf_netdev->tso_max_size); in netvsc_vf_changed()
2442 static int netvsc_unregister_vf(struct net_device *vf_netdev) in netvsc_unregister_vf() argument
2447 ndev = get_netvsc_byref(vf_netdev); in netvsc_unregister_vf()
2454 netdev_info(ndev, "VF unregistering: %s\n", vf_netdev->name); in netvsc_unregister_vf()
2457 netdev_rx_handler_unregister(vf_netdev); in netvsc_unregister_vf()
2458 netdev_upper_dev_unlink(vf_netdev, ndev); in netvsc_unregister_vf()
2459 RCU_INIT_POINTER(net_device_ctx->vf_netdev, NULL); in netvsc_unregister_vf()
2460 dev_put(vf_netdev); in netvsc_unregister_vf()
2491 struct net_device *net = NULL, *vf_netdev; in netvsc_probe() local
2615 for_each_netdev(dev_net(net), vf_netdev) { in netvsc_probe()
2616 ret = check_dev_is_matching_vf(vf_netdev); in netvsc_probe()
2620 if (net != get_netvsc_byslot(vf_netdev)) in netvsc_probe()
2623 netvsc_prepare_bonding(vf_netdev); in netvsc_probe()
2624 netdev_lock_ops(vf_netdev); in netvsc_probe()
2625 netvsc_register_vf(vf_netdev, VF_REG_IN_PROBE); in netvsc_probe()
2626 netdev_unlock_ops(vf_netdev); in netvsc_probe()
2627 __netvsc_vf_setup(net, vf_netdev); in netvsc_probe()
2652 struct net_device *vf_netdev, *net; in netvsc_remove() local
2678 vf_netdev = rtnl_dereference(ndev_ctx->vf_netdev); in netvsc_remove()
2679 if (vf_netdev) in netvsc_remove()
2680 netvsc_unregister_vf(vf_netdev); in netvsc_remove()
2782 struct net_device *vf_netdev; in netvsc_event_set_vf_ns() local
2785 vf_netdev = rtnl_dereference(ndev_ctx->vf_netdev); in netvsc_event_set_vf_ns()
2786 if (!vf_netdev) in netvsc_event_set_vf_ns()
2789 if (!net_eq(dev_net(ndev), dev_net(vf_netdev))) { in netvsc_event_set_vf_ns()
2790 ret = dev_change_net_namespace(vf_netdev, dev_net(ndev), in netvsc_event_set_vf_ns()
2793 netdev_err(vf_netdev, in netvsc_event_set_vf_ns()
2797 netdev_info(vf_netdev, in netvsc_event_set_vf_ns()