@@ -493,48 +493,10 @@ static void vlan_dev_change_rx_flags(struct net_device *dev, int change)
493
493
}
494
494
}
495
495
496
- static int vlan_calculate_locking_subclass (struct net_device * real_dev )
497
- {
498
- int subclass = 0 ;
499
-
500
- while (is_vlan_dev (real_dev )) {
501
- subclass ++ ;
502
- real_dev = vlan_dev_priv (real_dev )-> real_dev ;
503
- }
504
-
505
- return subclass ;
506
- }
507
-
508
- static void vlan_dev_mc_sync (struct net_device * to , struct net_device * from )
509
- {
510
- int err = 0 , subclass ;
511
-
512
- subclass = vlan_calculate_locking_subclass (to );
513
-
514
- spin_lock_nested (& to -> addr_list_lock , subclass );
515
- err = __hw_addr_sync (& to -> mc , & from -> mc , to -> addr_len );
516
- if (!err )
517
- __dev_set_rx_mode (to );
518
- spin_unlock (& to -> addr_list_lock );
519
- }
520
-
521
- static void vlan_dev_uc_sync (struct net_device * to , struct net_device * from )
522
- {
523
- int err = 0 , subclass ;
524
-
525
- subclass = vlan_calculate_locking_subclass (to );
526
-
527
- spin_lock_nested (& to -> addr_list_lock , subclass );
528
- err = __hw_addr_sync (& to -> uc , & from -> uc , to -> addr_len );
529
- if (!err )
530
- __dev_set_rx_mode (to );
531
- spin_unlock (& to -> addr_list_lock );
532
- }
533
-
534
496
static void vlan_dev_set_rx_mode (struct net_device * vlan_dev )
535
497
{
536
- vlan_dev_mc_sync (vlan_dev_priv (vlan_dev )-> real_dev , vlan_dev );
537
- vlan_dev_uc_sync (vlan_dev_priv (vlan_dev )-> real_dev , vlan_dev );
498
+ dev_mc_sync (vlan_dev_priv (vlan_dev )-> real_dev , vlan_dev );
499
+ dev_uc_sync (vlan_dev_priv (vlan_dev )-> real_dev , vlan_dev );
538
500
}
539
501
540
502
/*
@@ -562,6 +524,11 @@ static void vlan_dev_set_lockdep_class(struct net_device *dev, int subclass)
562
524
netdev_for_each_tx_queue (dev , vlan_dev_set_lockdep_one , & subclass );
563
525
}
564
526
527
+ static int vlan_dev_get_lock_subclass (struct net_device * dev )
528
+ {
529
+ return vlan_dev_priv (dev )-> nest_level ;
530
+ }
531
+
565
532
static const struct header_ops vlan_header_ops = {
566
533
.create = vlan_dev_hard_header ,
567
534
.rebuild = vlan_dev_rebuild_header ,
@@ -597,7 +564,6 @@ static const struct net_device_ops vlan_netdev_ops;
597
564
static int vlan_dev_init (struct net_device * dev )
598
565
{
599
566
struct net_device * real_dev = vlan_dev_priv (dev )-> real_dev ;
600
- int subclass = 0 ;
601
567
602
568
netif_carrier_off (dev );
603
569
@@ -646,8 +612,7 @@ static int vlan_dev_init(struct net_device *dev)
646
612
647
613
SET_NETDEV_DEVTYPE (dev , & vlan_type );
648
614
649
- subclass = vlan_calculate_locking_subclass (dev );
650
- vlan_dev_set_lockdep_class (dev , subclass );
615
+ vlan_dev_set_lockdep_class (dev , vlan_dev_get_lock_subclass (dev ));
651
616
652
617
vlan_dev_priv (dev )-> vlan_pcpu_stats = netdev_alloc_pcpu_stats (struct vlan_pcpu_stats );
653
618
if (!vlan_dev_priv (dev )-> vlan_pcpu_stats )
@@ -819,6 +784,7 @@ static const struct net_device_ops vlan_netdev_ops = {
819
784
.ndo_netpoll_cleanup = vlan_dev_netpoll_cleanup ,
820
785
#endif
821
786
.ndo_fix_features = vlan_dev_fix_features ,
787
+ .ndo_get_lock_subclass = vlan_dev_get_lock_subclass ,
822
788
};
823
789
824
790
void vlan_setup (struct net_device * dev )
0 commit comments