4242#define LINKCHANGE_INT (2 * HZ)
4343#define VF_TAKEOVER_INT (HZ / 10)
4444
45+ /* Macros to define the context of vf registration */
46+ #define VF_REG_IN_PROBE 1
47+ #define VF_REG_IN_NOTIFIER 2
48+
4549static unsigned int ring_size __ro_after_init = 128 ;
4650module_param (ring_size , uint , 0444 );
4751MODULE_PARM_DESC (ring_size , "Ring buffer size (# of 4K pages)" );
@@ -2183,7 +2187,7 @@ static rx_handler_result_t netvsc_vf_handle_frame(struct sk_buff **pskb)
21832187}
21842188
21852189static int netvsc_vf_join (struct net_device * vf_netdev ,
2186- struct net_device * ndev )
2190+ struct net_device * ndev , int context )
21872191{
21882192 struct net_device_context * ndev_ctx = netdev_priv (ndev );
21892193 int ret ;
@@ -2206,7 +2210,11 @@ static int netvsc_vf_join(struct net_device *vf_netdev,
22062210 goto upper_link_failed ;
22072211 }
22082212
2209- schedule_delayed_work (& ndev_ctx -> vf_takeover , VF_TAKEOVER_INT );
2213+ /* If this registration is called from probe context vf_takeover
2214+ * is taken care of later in probe itself.
2215+ */
2216+ if (context == VF_REG_IN_NOTIFIER )
2217+ schedule_delayed_work (& ndev_ctx -> vf_takeover , VF_TAKEOVER_INT );
22102218
22112219 call_netdevice_notifiers (NETDEV_JOIN , vf_netdev );
22122220
@@ -2344,7 +2352,7 @@ static int netvsc_prepare_bonding(struct net_device *vf_netdev)
23442352 return NOTIFY_DONE ;
23452353}
23462354
2347- static int netvsc_register_vf (struct net_device * vf_netdev )
2355+ static int netvsc_register_vf (struct net_device * vf_netdev , int context )
23482356{
23492357 struct net_device_context * net_device_ctx ;
23502358 struct netvsc_device * netvsc_dev ;
@@ -2384,7 +2392,7 @@ static int netvsc_register_vf(struct net_device *vf_netdev)
23842392
23852393 netdev_info (ndev , "VF registering: %s\n" , vf_netdev -> name );
23862394
2387- if (netvsc_vf_join (vf_netdev , ndev ) != 0 )
2395+ if (netvsc_vf_join (vf_netdev , ndev , context ) != 0 )
23882396 return NOTIFY_DONE ;
23892397
23902398 dev_hold (vf_netdev );
@@ -2482,10 +2490,31 @@ static int netvsc_unregister_vf(struct net_device *vf_netdev)
24822490 return NOTIFY_OK ;
24832491}
24842492
2493+ static int check_dev_is_matching_vf (struct net_device * event_ndev )
2494+ {
2495+ /* Skip NetVSC interfaces */
2496+ if (event_ndev -> netdev_ops == & device_ops )
2497+ return - ENODEV ;
2498+
2499+ /* Avoid non-Ethernet type devices */
2500+ if (event_ndev -> type != ARPHRD_ETHER )
2501+ return - ENODEV ;
2502+
2503+ /* Avoid Vlan dev with same MAC registering as VF */
2504+ if (is_vlan_dev (event_ndev ))
2505+ return - ENODEV ;
2506+
2507+ /* Avoid Bonding master dev with same MAC registering as VF */
2508+ if (netif_is_bond_master (event_ndev ))
2509+ return - ENODEV ;
2510+
2511+ return 0 ;
2512+ }
2513+
24852514static int netvsc_probe (struct hv_device * dev ,
24862515 const struct hv_vmbus_device_id * dev_id )
24872516{
2488- struct net_device * net = NULL ;
2517+ struct net_device * net = NULL , * vf_netdev ;
24892518 struct net_device_context * net_device_ctx ;
24902519 struct netvsc_device_info * device_info = NULL ;
24912520 struct netvsc_device * nvdev ;
@@ -2597,6 +2626,30 @@ static int netvsc_probe(struct hv_device *dev,
25972626 }
25982627
25992628 list_add (& net_device_ctx -> list , & netvsc_dev_list );
2629+
2630+ /* When the hv_netvsc driver is unloaded and reloaded, the
2631+ * NET_DEVICE_REGISTER for the vf device is replayed before probe
2632+ * is complete. This is because register_netdevice_notifier() gets
2633+ * registered before vmbus_driver_register() so that callback func
2634+ * is set before probe and we don't miss events like NETDEV_POST_INIT
2635+ * So, in this section we try to register the matching vf device that
2636+ * is present as a netdevice, knowing that its register call is not
2637+ * processed in the netvsc_netdev_notifier(as probing is progress and
2638+ * get_netvsc_byslot fails).
2639+ */
2640+ for_each_netdev (dev_net (net ), vf_netdev ) {
2641+ ret = check_dev_is_matching_vf (vf_netdev );
2642+ if (ret != 0 )
2643+ continue ;
2644+
2645+ if (net != get_netvsc_byslot (vf_netdev ))
2646+ continue ;
2647+
2648+ netvsc_prepare_bonding (vf_netdev );
2649+ netvsc_register_vf (vf_netdev , VF_REG_IN_PROBE );
2650+ __netvsc_vf_setup (net , vf_netdev );
2651+ break ;
2652+ }
26002653 rtnl_unlock ();
26012654
26022655 netvsc_devinfo_put (device_info );
@@ -2752,28 +2805,17 @@ static int netvsc_netdev_event(struct notifier_block *this,
27522805 unsigned long event , void * ptr )
27532806{
27542807 struct net_device * event_dev = netdev_notifier_info_to_dev (ptr );
2808+ int ret = 0 ;
27552809
2756- /* Skip our own events */
2757- if (event_dev -> netdev_ops == & device_ops )
2758- return NOTIFY_DONE ;
2759-
2760- /* Avoid non-Ethernet type devices */
2761- if (event_dev -> type != ARPHRD_ETHER )
2762- return NOTIFY_DONE ;
2763-
2764- /* Avoid Vlan dev with same MAC registering as VF */
2765- if (is_vlan_dev (event_dev ))
2766- return NOTIFY_DONE ;
2767-
2768- /* Avoid Bonding master dev with same MAC registering as VF */
2769- if (netif_is_bond_master (event_dev ))
2810+ ret = check_dev_is_matching_vf (event_dev );
2811+ if (ret != 0 )
27702812 return NOTIFY_DONE ;
27712813
27722814 switch (event ) {
27732815 case NETDEV_POST_INIT :
27742816 return netvsc_prepare_bonding (event_dev );
27752817 case NETDEV_REGISTER :
2776- return netvsc_register_vf (event_dev );
2818+ return netvsc_register_vf (event_dev , VF_REG_IN_NOTIFIER );
27772819 case NETDEV_UNREGISTER :
27782820 return netvsc_unregister_vf (event_dev );
27792821 case NETDEV_UP :
0 commit comments