42
42
#define LINKCHANGE_INT (2 * HZ)
43
43
#define VF_TAKEOVER_INT (HZ / 10)
44
44
45
+ /* Macros to define the context of vf registration */
46
+ #define VF_REG_IN_PROBE 1
47
+ #define VF_REG_IN_NOTIFIER 2
48
+
45
49
static unsigned int ring_size __ro_after_init = 128 ;
46
50
module_param (ring_size , uint , 0444 );
47
51
MODULE_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)
2183
2187
}
2184
2188
2185
2189
static int netvsc_vf_join (struct net_device * vf_netdev ,
2186
- struct net_device * ndev )
2190
+ struct net_device * ndev , int context )
2187
2191
{
2188
2192
struct net_device_context * ndev_ctx = netdev_priv (ndev );
2189
2193
int ret ;
@@ -2206,7 +2210,11 @@ static int netvsc_vf_join(struct net_device *vf_netdev,
2206
2210
goto upper_link_failed ;
2207
2211
}
2208
2212
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 );
2210
2218
2211
2219
call_netdevice_notifiers (NETDEV_JOIN , vf_netdev );
2212
2220
@@ -2344,7 +2352,7 @@ static int netvsc_prepare_bonding(struct net_device *vf_netdev)
2344
2352
return NOTIFY_DONE ;
2345
2353
}
2346
2354
2347
- static int netvsc_register_vf (struct net_device * vf_netdev )
2355
+ static int netvsc_register_vf (struct net_device * vf_netdev , int context )
2348
2356
{
2349
2357
struct net_device_context * net_device_ctx ;
2350
2358
struct netvsc_device * netvsc_dev ;
@@ -2384,7 +2392,7 @@ static int netvsc_register_vf(struct net_device *vf_netdev)
2384
2392
2385
2393
netdev_info (ndev , "VF registering: %s\n" , vf_netdev -> name );
2386
2394
2387
- if (netvsc_vf_join (vf_netdev , ndev ) != 0 )
2395
+ if (netvsc_vf_join (vf_netdev , ndev , context ) != 0 )
2388
2396
return NOTIFY_DONE ;
2389
2397
2390
2398
dev_hold (vf_netdev );
@@ -2482,10 +2490,31 @@ static int netvsc_unregister_vf(struct net_device *vf_netdev)
2482
2490
return NOTIFY_OK ;
2483
2491
}
2484
2492
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
+
2485
2514
static int netvsc_probe (struct hv_device * dev ,
2486
2515
const struct hv_vmbus_device_id * dev_id )
2487
2516
{
2488
- struct net_device * net = NULL ;
2517
+ struct net_device * net = NULL , * vf_netdev ;
2489
2518
struct net_device_context * net_device_ctx ;
2490
2519
struct netvsc_device_info * device_info = NULL ;
2491
2520
struct netvsc_device * nvdev ;
@@ -2597,6 +2626,30 @@ static int netvsc_probe(struct hv_device *dev,
2597
2626
}
2598
2627
2599
2628
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
+ }
2600
2653
rtnl_unlock ();
2601
2654
2602
2655
netvsc_devinfo_put (device_info );
@@ -2752,28 +2805,17 @@ static int netvsc_netdev_event(struct notifier_block *this,
2752
2805
unsigned long event , void * ptr )
2753
2806
{
2754
2807
struct net_device * event_dev = netdev_notifier_info_to_dev (ptr );
2808
+ int ret = 0 ;
2755
2809
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 )
2770
2812
return NOTIFY_DONE ;
2771
2813
2772
2814
switch (event ) {
2773
2815
case NETDEV_POST_INIT :
2774
2816
return netvsc_prepare_bonding (event_dev );
2775
2817
case NETDEV_REGISTER :
2776
- return netvsc_register_vf (event_dev );
2818
+ return netvsc_register_vf (event_dev , VF_REG_IN_NOTIFIER );
2777
2819
case NETDEV_UNREGISTER :
2778
2820
return netvsc_unregister_vf (event_dev );
2779
2821
case NETDEV_UP :
0 commit comments