@@ -518,6 +518,11 @@ static struct lock_class_key macvlan_netdev_addr_lock_key;
518
518
#define MACVLAN_STATE_MASK \
519
519
((1<<__LINK_STATE_NOCARRIER) | (1<<__LINK_STATE_DORMANT))
520
520
521
+ static int macvlan_get_nest_level (struct net_device * dev )
522
+ {
523
+ return ((struct macvlan_dev * )netdev_priv (dev ))-> nest_level ;
524
+ }
525
+
521
526
static void macvlan_set_lockdep_class_one (struct net_device * dev ,
522
527
struct netdev_queue * txq ,
523
528
void * _unused )
@@ -528,8 +533,9 @@ static void macvlan_set_lockdep_class_one(struct net_device *dev,
528
533
529
534
static void macvlan_set_lockdep_class (struct net_device * dev )
530
535
{
531
- lockdep_set_class (& dev -> addr_list_lock ,
532
- & macvlan_netdev_addr_lock_key );
536
+ lockdep_set_class_and_subclass (& dev -> addr_list_lock ,
537
+ & macvlan_netdev_addr_lock_key ,
538
+ macvlan_get_nest_level (dev ));
533
539
netdev_for_each_tx_queue (dev , macvlan_set_lockdep_class_one , NULL );
534
540
}
535
541
@@ -731,6 +737,7 @@ static const struct net_device_ops macvlan_netdev_ops = {
731
737
.ndo_fdb_add = macvlan_fdb_add ,
732
738
.ndo_fdb_del = macvlan_fdb_del ,
733
739
.ndo_fdb_dump = ndo_dflt_fdb_dump ,
740
+ .ndo_get_lock_subclass = macvlan_get_nest_level ,
734
741
};
735
742
736
743
void macvlan_common_setup (struct net_device * dev )
@@ -859,6 +866,7 @@ int macvlan_common_newlink(struct net *src_net, struct net_device *dev,
859
866
vlan -> dev = dev ;
860
867
vlan -> port = port ;
861
868
vlan -> set_features = MACVLAN_FEATURES ;
869
+ vlan -> nest_level = dev_get_nest_level (lowerdev , netif_is_macvlan ) + 1 ;
862
870
863
871
vlan -> mode = MACVLAN_MODE_VEPA ;
864
872
if (data && data [IFLA_MACVLAN_MODE ])
0 commit comments