@@ -517,6 +517,11 @@ static struct lock_class_key macvlan_netdev_addr_lock_key;
517
517
#define MACVLAN_STATE_MASK \
518
518
((1<<__LINK_STATE_NOCARRIER) | (1<<__LINK_STATE_DORMANT))
519
519
520
+ static int macvlan_get_nest_level (struct net_device * dev )
521
+ {
522
+ return ((struct macvlan_dev * )netdev_priv (dev ))-> nest_level ;
523
+ }
524
+
520
525
static void macvlan_set_lockdep_class_one (struct net_device * dev ,
521
526
struct netdev_queue * txq ,
522
527
void * _unused )
@@ -527,8 +532,9 @@ static void macvlan_set_lockdep_class_one(struct net_device *dev,
527
532
528
533
static void macvlan_set_lockdep_class (struct net_device * dev )
529
534
{
530
- lockdep_set_class (& dev -> addr_list_lock ,
531
- & macvlan_netdev_addr_lock_key );
535
+ lockdep_set_class_and_subclass (& dev -> addr_list_lock ,
536
+ & macvlan_netdev_addr_lock_key ,
537
+ macvlan_get_nest_level (dev ));
532
538
netdev_for_each_tx_queue (dev , macvlan_set_lockdep_class_one , NULL );
533
539
}
534
540
@@ -723,6 +729,7 @@ static const struct net_device_ops macvlan_netdev_ops = {
723
729
.ndo_fdb_add = macvlan_fdb_add ,
724
730
.ndo_fdb_del = macvlan_fdb_del ,
725
731
.ndo_fdb_dump = ndo_dflt_fdb_dump ,
732
+ .ndo_get_lock_subclass = macvlan_get_nest_level ,
726
733
};
727
734
728
735
void macvlan_common_setup (struct net_device * dev )
@@ -851,6 +858,7 @@ int macvlan_common_newlink(struct net *src_net, struct net_device *dev,
851
858
vlan -> dev = dev ;
852
859
vlan -> port = port ;
853
860
vlan -> set_features = MACVLAN_FEATURES ;
861
+ vlan -> nest_level = dev_get_nest_level (lowerdev , netif_is_macvlan ) + 1 ;
854
862
855
863
vlan -> mode = MACVLAN_MODE_VEPA ;
856
864
if (data && data [IFLA_MACVLAN_MODE ])
0 commit comments