aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTaehee Yoo <ap420073@gmail.com>2019-10-21 14:47:51 -0400
committerDavid S. Miller <davem@davemloft.net>2019-10-24 17:53:48 -0400
commitab92d68fc22f9afab480153bd82a20f6e2533769 (patch)
tree03c4af9608cb03c9be7dd230953957b36f94d9e5
parent5343da4c17429efaa5fb1594ea96aee1a283e694 (diff)
net: core: add generic lockdep keys
Some interface types could be nested. (VLAN, BONDING, TEAM, MACSEC, MACVLAN, IPVLAN, VIRT_WIFI, VXLAN, etc..) These interface types should set lockdep class because, without lockdep class key, lockdep always warn about unexisting circular locking. In the current code, these interfaces have their own lockdep class keys and these manage itself. So that there are so many duplicate code around the /driver/net and /net/. This patch adds new generic lockdep keys and some helper functions for it. This patch does below changes. a) Add lockdep class keys in struct net_device - qdisc_running, xmit, addr_list, qdisc_busylock - these keys are used as dynamic lockdep key. b) When net_device is being allocated, lockdep keys are registered. - alloc_netdev_mqs() c) When net_device is being free'd llockdep keys are unregistered. - free_netdev() d) Add generic lockdep key helper function - netdev_register_lockdep_key() - netdev_unregister_lockdep_key() - netdev_update_lockdep_key() e) Remove unnecessary generic lockdep macro and functions f) Remove unnecessary lockdep code of each interfaces. After this patch, each interface modules don't need to maintain their lockdep keys. Signed-off-by: Taehee Yoo <ap420073@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--drivers/net/bonding/bond_main.c1
-rw-r--r--drivers/net/ethernet/netronome/nfp/nfp_net_repr.c18
-rw-r--r--drivers/net/hamradio/bpqether.c22
-rw-r--r--drivers/net/hyperv/netvsc_drv.c2
-rw-r--r--drivers/net/ipvlan/ipvlan_main.c2
-rw-r--r--drivers/net/macsec.c5
-rw-r--r--drivers/net/macvlan.c12
-rw-r--r--drivers/net/ppp/ppp_generic.c2
-rw-r--r--drivers/net/team/team.c2
-rw-r--r--drivers/net/vrf.c1
-rw-r--r--drivers/net/wireless/intersil/hostap/hostap_hw.c25
-rw-r--r--include/linux/netdevice.h35
-rw-r--r--net/8021q/vlan_dev.c27
-rw-r--r--net/batman-adv/soft-interface.c32
-rw-r--r--net/bluetooth/6lowpan.c8
-rw-r--r--net/bridge/br_device.c8
-rw-r--r--net/core/dev.c127
-rw-r--r--net/core/rtnetlink.c1
-rw-r--r--net/dsa/master.c5
-rw-r--r--net/dsa/slave.c12
-rw-r--r--net/ieee802154/6lowpan/core.c8
-rw-r--r--net/l2tp/l2tp_eth.c1
-rw-r--r--net/netrom/af_netrom.c23
-rw-r--r--net/rose/af_rose.c23
-rw-r--r--net/sched/sch_generic.c17
25 files changed, 63 insertions, 356 deletions
diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
index 21d8fcc83c9c..ac1b09b56c77 100644
--- a/drivers/net/bonding/bond_main.c
+++ b/drivers/net/bonding/bond_main.c
@@ -4769,7 +4769,6 @@ static int bond_init(struct net_device *bond_dev)
4769 return -ENOMEM; 4769 return -ENOMEM;
4770 4770
4771 bond->nest_level = SINGLE_DEPTH_NESTING; 4771 bond->nest_level = SINGLE_DEPTH_NESTING;
4772 netdev_lockdep_set_classes(bond_dev);
4773 4772
4774 list_add_tail(&bond->bond_list, &bn->dev_list); 4773 list_add_tail(&bond->bond_list, &bn->dev_list);
4775 4774
diff --git a/drivers/net/ethernet/netronome/nfp/nfp_net_repr.c b/drivers/net/ethernet/netronome/nfp/nfp_net_repr.c
index 1eef446036d6..79d72c88bbef 100644
--- a/drivers/net/ethernet/netronome/nfp/nfp_net_repr.c
+++ b/drivers/net/ethernet/netronome/nfp/nfp_net_repr.c
@@ -299,22 +299,6 @@ static void nfp_repr_clean(struct nfp_repr *repr)
299 nfp_port_free(repr->port); 299 nfp_port_free(repr->port);
300} 300}
301 301
302static struct lock_class_key nfp_repr_netdev_xmit_lock_key;
303static struct lock_class_key nfp_repr_netdev_addr_lock_key;
304
305static void nfp_repr_set_lockdep_class_one(struct net_device *dev,
306 struct netdev_queue *txq,
307 void *_unused)
308{
309 lockdep_set_class(&txq->_xmit_lock, &nfp_repr_netdev_xmit_lock_key);
310}
311
312static void nfp_repr_set_lockdep_class(struct net_device *dev)
313{
314 lockdep_set_class(&dev->addr_list_lock, &nfp_repr_netdev_addr_lock_key);
315 netdev_for_each_tx_queue(dev, nfp_repr_set_lockdep_class_one, NULL);
316}
317
318int nfp_repr_init(struct nfp_app *app, struct net_device *netdev, 302int nfp_repr_init(struct nfp_app *app, struct net_device *netdev,
319 u32 cmsg_port_id, struct nfp_port *port, 303 u32 cmsg_port_id, struct nfp_port *port,
320 struct net_device *pf_netdev) 304 struct net_device *pf_netdev)
@@ -324,8 +308,6 @@ int nfp_repr_init(struct nfp_app *app, struct net_device *netdev,
324 u32 repr_cap = nn->tlv_caps.repr_cap; 308 u32 repr_cap = nn->tlv_caps.repr_cap;
325 int err; 309 int err;
326 310
327 nfp_repr_set_lockdep_class(netdev);
328
329 repr->port = port; 311 repr->port = port;
330 repr->dst = metadata_dst_alloc(0, METADATA_HW_PORT_MUX, GFP_KERNEL); 312 repr->dst = metadata_dst_alloc(0, METADATA_HW_PORT_MUX, GFP_KERNEL);
331 if (!repr->dst) 313 if (!repr->dst)
diff --git a/drivers/net/hamradio/bpqether.c b/drivers/net/hamradio/bpqether.c
index fbec711ff514..fbea6f232819 100644
--- a/drivers/net/hamradio/bpqether.c
+++ b/drivers/net/hamradio/bpqether.c
@@ -107,27 +107,6 @@ struct bpqdev {
107 107
108static LIST_HEAD(bpq_devices); 108static LIST_HEAD(bpq_devices);
109 109
110/*
111 * bpqether network devices are paired with ethernet devices below them, so
112 * form a special "super class" of normal ethernet devices; split their locks
113 * off into a separate class since they always nest.
114 */
115static struct lock_class_key bpq_netdev_xmit_lock_key;
116static struct lock_class_key bpq_netdev_addr_lock_key;
117
118static void bpq_set_lockdep_class_one(struct net_device *dev,
119 struct netdev_queue *txq,
120 void *_unused)
121{
122 lockdep_set_class(&txq->_xmit_lock, &bpq_netdev_xmit_lock_key);
123}
124
125static void bpq_set_lockdep_class(struct net_device *dev)
126{
127 lockdep_set_class(&dev->addr_list_lock, &bpq_netdev_addr_lock_key);
128 netdev_for_each_tx_queue(dev, bpq_set_lockdep_class_one, NULL);
129}
130
131/* ------------------------------------------------------------------------ */ 110/* ------------------------------------------------------------------------ */
132 111
133 112
@@ -498,7 +477,6 @@ static int bpq_new_device(struct net_device *edev)
498 err = register_netdevice(ndev); 477 err = register_netdevice(ndev);
499 if (err) 478 if (err)
500 goto error; 479 goto error;
501 bpq_set_lockdep_class(ndev);
502 480
503 /* List protected by RTNL */ 481 /* List protected by RTNL */
504 list_add_rcu(&bpq->bpq_list, &bpq_devices); 482 list_add_rcu(&bpq->bpq_list, &bpq_devices);
diff --git a/drivers/net/hyperv/netvsc_drv.c b/drivers/net/hyperv/netvsc_drv.c
index 39dddcd8b3cb..fd4fff57fd6e 100644
--- a/drivers/net/hyperv/netvsc_drv.c
+++ b/drivers/net/hyperv/netvsc_drv.c
@@ -2335,8 +2335,6 @@ static int netvsc_probe(struct hv_device *dev,
2335 NETIF_F_HW_VLAN_CTAG_RX; 2335 NETIF_F_HW_VLAN_CTAG_RX;
2336 net->vlan_features = net->features; 2336 net->vlan_features = net->features;
2337 2337
2338 netdev_lockdep_set_classes(net);
2339
2340 /* MTU range: 68 - 1500 or 65521 */ 2338 /* MTU range: 68 - 1500 or 65521 */
2341 net->min_mtu = NETVSC_MTU_MIN; 2339 net->min_mtu = NETVSC_MTU_MIN;
2342 if (nvdev->nvsp_version >= NVSP_PROTOCOL_VERSION_2) 2340 if (nvdev->nvsp_version >= NVSP_PROTOCOL_VERSION_2)
diff --git a/drivers/net/ipvlan/ipvlan_main.c b/drivers/net/ipvlan/ipvlan_main.c
index 887bbba4631e..ba3dfac1d904 100644
--- a/drivers/net/ipvlan/ipvlan_main.c
+++ b/drivers/net/ipvlan/ipvlan_main.c
@@ -131,8 +131,6 @@ static int ipvlan_init(struct net_device *dev)
131 dev->gso_max_segs = phy_dev->gso_max_segs; 131 dev->gso_max_segs = phy_dev->gso_max_segs;
132 dev->hard_header_len = phy_dev->hard_header_len; 132 dev->hard_header_len = phy_dev->hard_header_len;
133 133
134 netdev_lockdep_set_classes(dev);
135
136 ipvlan->pcpu_stats = netdev_alloc_pcpu_stats(struct ipvl_pcpu_stats); 134 ipvlan->pcpu_stats = netdev_alloc_pcpu_stats(struct ipvl_pcpu_stats);
137 if (!ipvlan->pcpu_stats) 135 if (!ipvlan->pcpu_stats)
138 return -ENOMEM; 136 return -ENOMEM;
diff --git a/drivers/net/macsec.c b/drivers/net/macsec.c
index cb7637364b40..e2a3d1d5795f 100644
--- a/drivers/net/macsec.c
+++ b/drivers/net/macsec.c
@@ -2750,7 +2750,6 @@ static netdev_tx_t macsec_start_xmit(struct sk_buff *skb,
2750 2750
2751#define MACSEC_FEATURES \ 2751#define MACSEC_FEATURES \
2752 (NETIF_F_SG | NETIF_F_HIGHDMA | NETIF_F_FRAGLIST) 2752 (NETIF_F_SG | NETIF_F_HIGHDMA | NETIF_F_FRAGLIST)
2753static struct lock_class_key macsec_netdev_addr_lock_key;
2754 2753
2755static int macsec_dev_init(struct net_device *dev) 2754static int macsec_dev_init(struct net_device *dev)
2756{ 2755{
@@ -3264,10 +3263,6 @@ static int macsec_newlink(struct net *net, struct net_device *dev,
3264 dev_hold(real_dev); 3263 dev_hold(real_dev);
3265 3264
3266 macsec->nest_level = dev_get_nest_level(real_dev) + 1; 3265 macsec->nest_level = dev_get_nest_level(real_dev) + 1;
3267 netdev_lockdep_set_classes(dev);
3268 lockdep_set_class_and_subclass(&dev->addr_list_lock,
3269 &macsec_netdev_addr_lock_key,
3270 macsec_get_nest_level(dev));
3271 3266
3272 err = netdev_upper_dev_link(real_dev, dev, extack); 3267 err = netdev_upper_dev_link(real_dev, dev, extack);
3273 if (err < 0) 3268 if (err < 0)
diff --git a/drivers/net/macvlan.c b/drivers/net/macvlan.c
index 940192c057b6..0354e9be2ca5 100644
--- a/drivers/net/macvlan.c
+++ b/drivers/net/macvlan.c
@@ -852,8 +852,6 @@ static int macvlan_do_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
852 * "super class" of normal network devices; split their locks off into a 852 * "super class" of normal network devices; split their locks off into a
853 * separate class since they always nest. 853 * separate class since they always nest.
854 */ 854 */
855static struct lock_class_key macvlan_netdev_addr_lock_key;
856
857#define ALWAYS_ON_OFFLOADS \ 855#define ALWAYS_ON_OFFLOADS \
858 (NETIF_F_SG | NETIF_F_HW_CSUM | NETIF_F_GSO_SOFTWARE | \ 856 (NETIF_F_SG | NETIF_F_HW_CSUM | NETIF_F_GSO_SOFTWARE | \
859 NETIF_F_GSO_ROBUST | NETIF_F_GSO_ENCAP_ALL) 857 NETIF_F_GSO_ROBUST | NETIF_F_GSO_ENCAP_ALL)
@@ -874,14 +872,6 @@ static int macvlan_get_nest_level(struct net_device *dev)
874 return ((struct macvlan_dev *)netdev_priv(dev))->nest_level; 872 return ((struct macvlan_dev *)netdev_priv(dev))->nest_level;
875} 873}
876 874
877static void macvlan_set_lockdep_class(struct net_device *dev)
878{
879 netdev_lockdep_set_classes(dev);
880 lockdep_set_class_and_subclass(&dev->addr_list_lock,
881 &macvlan_netdev_addr_lock_key,
882 macvlan_get_nest_level(dev));
883}
884
885static int macvlan_init(struct net_device *dev) 875static int macvlan_init(struct net_device *dev)
886{ 876{
887 struct macvlan_dev *vlan = netdev_priv(dev); 877 struct macvlan_dev *vlan = netdev_priv(dev);
@@ -900,8 +890,6 @@ static int macvlan_init(struct net_device *dev)
900 dev->gso_max_segs = lowerdev->gso_max_segs; 890 dev->gso_max_segs = lowerdev->gso_max_segs;
901 dev->hard_header_len = lowerdev->hard_header_len; 891 dev->hard_header_len = lowerdev->hard_header_len;
902 892
903 macvlan_set_lockdep_class(dev);
904
905 vlan->pcpu_stats = netdev_alloc_pcpu_stats(struct vlan_pcpu_stats); 893 vlan->pcpu_stats = netdev_alloc_pcpu_stats(struct vlan_pcpu_stats);
906 if (!vlan->pcpu_stats) 894 if (!vlan->pcpu_stats)
907 return -ENOMEM; 895 return -ENOMEM;
diff --git a/drivers/net/ppp/ppp_generic.c b/drivers/net/ppp/ppp_generic.c
index 9a1b006904a7..61824bbb5588 100644
--- a/drivers/net/ppp/ppp_generic.c
+++ b/drivers/net/ppp/ppp_generic.c
@@ -1324,8 +1324,6 @@ static int ppp_dev_init(struct net_device *dev)
1324{ 1324{
1325 struct ppp *ppp; 1325 struct ppp *ppp;
1326 1326
1327 netdev_lockdep_set_classes(dev);
1328
1329 ppp = netdev_priv(dev); 1327 ppp = netdev_priv(dev);
1330 /* Let the netdevice take a reference on the ppp file. This ensures 1328 /* Let the netdevice take a reference on the ppp file. This ensures
1331 * that ppp_destroy_interface() won't run before the device gets 1329 * that ppp_destroy_interface() won't run before the device gets
diff --git a/drivers/net/team/team.c b/drivers/net/team/team.c
index e8089def5a46..6cea83b48cad 100644
--- a/drivers/net/team/team.c
+++ b/drivers/net/team/team.c
@@ -1642,8 +1642,6 @@ static int team_init(struct net_device *dev)
1642 goto err_options_register; 1642 goto err_options_register;
1643 netif_carrier_off(dev); 1643 netif_carrier_off(dev);
1644 1644
1645 netdev_lockdep_set_classes(dev);
1646
1647 return 0; 1645 return 0;
1648 1646
1649err_options_register: 1647err_options_register:
diff --git a/drivers/net/vrf.c b/drivers/net/vrf.c
index ee52bde058df..b8228f50bc94 100644
--- a/drivers/net/vrf.c
+++ b/drivers/net/vrf.c
@@ -865,7 +865,6 @@ static int vrf_dev_init(struct net_device *dev)
865 865
866 /* similarly, oper state is irrelevant; set to up to avoid confusion */ 866 /* similarly, oper state is irrelevant; set to up to avoid confusion */
867 dev->operstate = IF_OPER_UP; 867 dev->operstate = IF_OPER_UP;
868 netdev_lockdep_set_classes(dev);
869 return 0; 868 return 0;
870 869
871out_rth: 870out_rth:
diff --git a/drivers/net/wireless/intersil/hostap/hostap_hw.c b/drivers/net/wireless/intersil/hostap/hostap_hw.c
index 158a3d762e55..e323e9a5999f 100644
--- a/drivers/net/wireless/intersil/hostap/hostap_hw.c
+++ b/drivers/net/wireless/intersil/hostap/hostap_hw.c
@@ -3041,30 +3041,6 @@ static void prism2_clear_set_tim_queue(local_info_t *local)
3041 } 3041 }
3042} 3042}
3043 3043
3044
3045/*
3046 * HostAP uses two layers of net devices, where the inner
3047 * layer gets called all the time from the outer layer.
3048 * This is a natural nesting, which needs a split lock type.
3049 */
3050static struct lock_class_key hostap_netdev_xmit_lock_key;
3051static struct lock_class_key hostap_netdev_addr_lock_key;
3052
3053static void prism2_set_lockdep_class_one(struct net_device *dev,
3054 struct netdev_queue *txq,
3055 void *_unused)
3056{
3057 lockdep_set_class(&txq->_xmit_lock,
3058 &hostap_netdev_xmit_lock_key);
3059}
3060
3061static void prism2_set_lockdep_class(struct net_device *dev)
3062{
3063 lockdep_set_class(&dev->addr_list_lock,
3064 &hostap_netdev_addr_lock_key);
3065 netdev_for_each_tx_queue(dev, prism2_set_lockdep_class_one, NULL);
3066}
3067
3068static struct net_device * 3044static struct net_device *
3069prism2_init_local_data(struct prism2_helper_functions *funcs, int card_idx, 3045prism2_init_local_data(struct prism2_helper_functions *funcs, int card_idx,
3070 struct device *sdev) 3046 struct device *sdev)
@@ -3223,7 +3199,6 @@ while (0)
3223 if (ret >= 0) 3199 if (ret >= 0)
3224 ret = register_netdevice(dev); 3200 ret = register_netdevice(dev);
3225 3201
3226 prism2_set_lockdep_class(dev);
3227 rtnl_unlock(); 3202 rtnl_unlock();
3228 if (ret < 0) { 3203 if (ret < 0) {
3229 printk(KERN_WARNING "%s: register netdevice failed!\n", 3204 printk(KERN_WARNING "%s: register netdevice failed!\n",
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
index 38c5909e1c35..c93df7cf187b 100644
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
@@ -925,6 +925,7 @@ struct dev_ifalias {
925struct devlink; 925struct devlink;
926struct tlsdev_ops; 926struct tlsdev_ops;
927 927
928
928/* 929/*
929 * This structure defines the management hooks for network devices. 930 * This structure defines the management hooks for network devices.
930 * The following hooks can be defined; unless noted otherwise, they are 931 * The following hooks can be defined; unless noted otherwise, they are
@@ -1760,9 +1761,13 @@ enum netdev_priv_flags {
1760 * @phydev: Physical device may attach itself 1761 * @phydev: Physical device may attach itself
1761 * for hardware timestamping 1762 * for hardware timestamping
1762 * @sfp_bus: attached &struct sfp_bus structure. 1763 * @sfp_bus: attached &struct sfp_bus structure.
1763 * 1764 * @qdisc_tx_busylock_key: lockdep class annotating Qdisc->busylock
1764 * @qdisc_tx_busylock: lockdep class annotating Qdisc->busylock spinlock 1765 spinlock
1765 * @qdisc_running_key: lockdep class annotating Qdisc->running seqcount 1766 * @qdisc_running_key: lockdep class annotating Qdisc->running seqcount
1767 * @qdisc_xmit_lock_key: lockdep class annotating
1768 * netdev_queue->_xmit_lock spinlock
1769 * @addr_list_lock_key: lockdep class annotating
1770 * net_device->addr_list_lock spinlock
1766 * 1771 *
1767 * @proto_down: protocol port state information can be sent to the 1772 * @proto_down: protocol port state information can be sent to the
1768 * switch driver and used to set the phys state of the 1773 * switch driver and used to set the phys state of the
@@ -2049,8 +2054,10 @@ struct net_device {
2049#endif 2054#endif
2050 struct phy_device *phydev; 2055 struct phy_device *phydev;
2051 struct sfp_bus *sfp_bus; 2056 struct sfp_bus *sfp_bus;
2052 struct lock_class_key *qdisc_tx_busylock; 2057 struct lock_class_key qdisc_tx_busylock_key;
2053 struct lock_class_key *qdisc_running_key; 2058 struct lock_class_key qdisc_running_key;
2059 struct lock_class_key qdisc_xmit_lock_key;
2060 struct lock_class_key addr_list_lock_key;
2054 bool proto_down; 2061 bool proto_down;
2055 unsigned wol_enabled:1; 2062 unsigned wol_enabled:1;
2056}; 2063};
@@ -2128,23 +2135,6 @@ static inline void netdev_for_each_tx_queue(struct net_device *dev,
2128 f(dev, &dev->_tx[i], arg); 2135 f(dev, &dev->_tx[i], arg);
2129} 2136}
2130 2137
2131#define netdev_lockdep_set_classes(dev) \
2132{ \
2133 static struct lock_class_key qdisc_tx_busylock_key; \
2134 static struct lock_class_key qdisc_running_key; \
2135 static struct lock_class_key qdisc_xmit_lock_key; \
2136 static struct lock_class_key dev_addr_list_lock_key; \
2137 unsigned int i; \
2138 \
2139 (dev)->qdisc_tx_busylock = &qdisc_tx_busylock_key; \
2140 (dev)->qdisc_running_key = &qdisc_running_key; \
2141 lockdep_set_class(&(dev)->addr_list_lock, \
2142 &dev_addr_list_lock_key); \
2143 for (i = 0; i < (dev)->num_tx_queues; i++) \
2144 lockdep_set_class(&(dev)->_tx[i]._xmit_lock, \
2145 &qdisc_xmit_lock_key); \
2146}
2147
2148u16 netdev_pick_tx(struct net_device *dev, struct sk_buff *skb, 2138u16 netdev_pick_tx(struct net_device *dev, struct sk_buff *skb,
2149 struct net_device *sb_dev); 2139 struct net_device *sb_dev);
2150struct netdev_queue *netdev_core_pick_tx(struct net_device *dev, 2140struct netdev_queue *netdev_core_pick_tx(struct net_device *dev,
@@ -3143,6 +3133,7 @@ static inline void netif_stop_queue(struct net_device *dev)
3143} 3133}
3144 3134
3145void netif_tx_stop_all_queues(struct net_device *dev); 3135void netif_tx_stop_all_queues(struct net_device *dev);
3136void netdev_update_lockdep_key(struct net_device *dev);
3146 3137
3147static inline bool netif_tx_queue_stopped(const struct netdev_queue *dev_queue) 3138static inline bool netif_tx_queue_stopped(const struct netdev_queue *dev_queue)
3148{ 3139{
diff --git a/net/8021q/vlan_dev.c b/net/8021q/vlan_dev.c
index 93eadf179123..6e6f26bf6e73 100644
--- a/net/8021q/vlan_dev.c
+++ b/net/8021q/vlan_dev.c
@@ -489,31 +489,6 @@ static void vlan_dev_set_rx_mode(struct net_device *vlan_dev)
489 dev_uc_sync(vlan_dev_priv(vlan_dev)->real_dev, vlan_dev); 489 dev_uc_sync(vlan_dev_priv(vlan_dev)->real_dev, vlan_dev);
490} 490}
491 491
492/*
493 * vlan network devices have devices nesting below it, and are a special
494 * "super class" of normal network devices; split their locks off into a
495 * separate class since they always nest.
496 */
497static struct lock_class_key vlan_netdev_xmit_lock_key;
498static struct lock_class_key vlan_netdev_addr_lock_key;
499
500static void vlan_dev_set_lockdep_one(struct net_device *dev,
501 struct netdev_queue *txq,
502 void *_subclass)
503{
504 lockdep_set_class_and_subclass(&txq->_xmit_lock,
505 &vlan_netdev_xmit_lock_key,
506 *(int *)_subclass);
507}
508
509static void vlan_dev_set_lockdep_class(struct net_device *dev, int subclass)
510{
511 lockdep_set_class_and_subclass(&dev->addr_list_lock,
512 &vlan_netdev_addr_lock_key,
513 subclass);
514 netdev_for_each_tx_queue(dev, vlan_dev_set_lockdep_one, &subclass);
515}
516
517static int vlan_dev_get_lock_subclass(struct net_device *dev) 492static int vlan_dev_get_lock_subclass(struct net_device *dev)
518{ 493{
519 return vlan_dev_priv(dev)->nest_level; 494 return vlan_dev_priv(dev)->nest_level;
@@ -609,8 +584,6 @@ static int vlan_dev_init(struct net_device *dev)
609 584
610 SET_NETDEV_DEVTYPE(dev, &vlan_type); 585 SET_NETDEV_DEVTYPE(dev, &vlan_type);
611 586
612 vlan_dev_set_lockdep_class(dev, vlan_dev_get_lock_subclass(dev));
613
614 vlan->vlan_pcpu_stats = netdev_alloc_pcpu_stats(struct vlan_pcpu_stats); 587 vlan->vlan_pcpu_stats = netdev_alloc_pcpu_stats(struct vlan_pcpu_stats);
615 if (!vlan->vlan_pcpu_stats) 588 if (!vlan->vlan_pcpu_stats)
616 return -ENOMEM; 589 return -ENOMEM;
diff --git a/net/batman-adv/soft-interface.c b/net/batman-adv/soft-interface.c
index 9cbed6f5a85a..5ee8e9a100f9 100644
--- a/net/batman-adv/soft-interface.c
+++ b/net/batman-adv/soft-interface.c
@@ -740,36 +740,6 @@ static int batadv_interface_kill_vid(struct net_device *dev, __be16 proto,
740 return 0; 740 return 0;
741} 741}
742 742
743/* batman-adv network devices have devices nesting below it and are a special
744 * "super class" of normal network devices; split their locks off into a
745 * separate class since they always nest.
746 */
747static struct lock_class_key batadv_netdev_xmit_lock_key;
748static struct lock_class_key batadv_netdev_addr_lock_key;
749
750/**
751 * batadv_set_lockdep_class_one() - Set lockdep class for a single tx queue
752 * @dev: device which owns the tx queue
753 * @txq: tx queue to modify
754 * @_unused: always NULL
755 */
756static void batadv_set_lockdep_class_one(struct net_device *dev,
757 struct netdev_queue *txq,
758 void *_unused)
759{
760 lockdep_set_class(&txq->_xmit_lock, &batadv_netdev_xmit_lock_key);
761}
762
763/**
764 * batadv_set_lockdep_class() - Set txq and addr_list lockdep class
765 * @dev: network device to modify
766 */
767static void batadv_set_lockdep_class(struct net_device *dev)
768{
769 lockdep_set_class(&dev->addr_list_lock, &batadv_netdev_addr_lock_key);
770 netdev_for_each_tx_queue(dev, batadv_set_lockdep_class_one, NULL);
771}
772
773/** 743/**
774 * batadv_softif_init_late() - late stage initialization of soft interface 744 * batadv_softif_init_late() - late stage initialization of soft interface
775 * @dev: registered network device to modify 745 * @dev: registered network device to modify
@@ -783,8 +753,6 @@ static int batadv_softif_init_late(struct net_device *dev)
783 int ret; 753 int ret;
784 size_t cnt_len = sizeof(u64) * BATADV_CNT_NUM; 754 size_t cnt_len = sizeof(u64) * BATADV_CNT_NUM;
785 755
786 batadv_set_lockdep_class(dev);
787
788 bat_priv = netdev_priv(dev); 756 bat_priv = netdev_priv(dev);
789 bat_priv->soft_iface = dev; 757 bat_priv->soft_iface = dev;
790 758
diff --git a/net/bluetooth/6lowpan.c b/net/bluetooth/6lowpan.c
index bb55d92691b0..4febc82a7c76 100644
--- a/net/bluetooth/6lowpan.c
+++ b/net/bluetooth/6lowpan.c
@@ -571,15 +571,7 @@ static netdev_tx_t bt_xmit(struct sk_buff *skb, struct net_device *netdev)
571 return err < 0 ? NET_XMIT_DROP : err; 571 return err < 0 ? NET_XMIT_DROP : err;
572} 572}
573 573
574static int bt_dev_init(struct net_device *dev)
575{
576 netdev_lockdep_set_classes(dev);
577
578 return 0;
579}
580
581static const struct net_device_ops netdev_ops = { 574static const struct net_device_ops netdev_ops = {
582 .ndo_init = bt_dev_init,
583 .ndo_start_xmit = bt_xmit, 575 .ndo_start_xmit = bt_xmit,
584}; 576};
585 577
diff --git a/net/bridge/br_device.c b/net/bridge/br_device.c
index 681b72862c16..e804a3016902 100644
--- a/net/bridge/br_device.c
+++ b/net/bridge/br_device.c
@@ -24,8 +24,6 @@
24const struct nf_br_ops __rcu *nf_br_ops __read_mostly; 24const struct nf_br_ops __rcu *nf_br_ops __read_mostly;
25EXPORT_SYMBOL_GPL(nf_br_ops); 25EXPORT_SYMBOL_GPL(nf_br_ops);
26 26
27static struct lock_class_key bridge_netdev_addr_lock_key;
28
29/* net device transmit always called with BH disabled */ 27/* net device transmit always called with BH disabled */
30netdev_tx_t br_dev_xmit(struct sk_buff *skb, struct net_device *dev) 28netdev_tx_t br_dev_xmit(struct sk_buff *skb, struct net_device *dev)
31{ 29{
@@ -108,11 +106,6 @@ out:
108 return NETDEV_TX_OK; 106 return NETDEV_TX_OK;
109} 107}
110 108
111static void br_set_lockdep_class(struct net_device *dev)
112{
113 lockdep_set_class(&dev->addr_list_lock, &bridge_netdev_addr_lock_key);
114}
115
116static int br_dev_init(struct net_device *dev) 109static int br_dev_init(struct net_device *dev)
117{ 110{
118 struct net_bridge *br = netdev_priv(dev); 111 struct net_bridge *br = netdev_priv(dev);
@@ -150,7 +143,6 @@ static int br_dev_init(struct net_device *dev)
150 br_mdb_hash_fini(br); 143 br_mdb_hash_fini(br);
151 br_fdb_hash_fini(br); 144 br_fdb_hash_fini(br);
152 } 145 }
153 br_set_lockdep_class(dev);
154 146
155 return err; 147 return err;
156} 148}
diff --git a/net/core/dev.c b/net/core/dev.c
index ab0edfc4a422..5722a81b6edd 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -277,88 +277,6 @@ static RAW_NOTIFIER_HEAD(netdev_chain);
277DEFINE_PER_CPU_ALIGNED(struct softnet_data, softnet_data); 277DEFINE_PER_CPU_ALIGNED(struct softnet_data, softnet_data);
278EXPORT_PER_CPU_SYMBOL(softnet_data); 278EXPORT_PER_CPU_SYMBOL(softnet_data);
279 279
280#ifdef CONFIG_LOCKDEP
281/*
282 * register_netdevice() inits txq->_xmit_lock and sets lockdep class
283 * according to dev->type
284 */
285static const unsigned short netdev_lock_type[] = {
286 ARPHRD_NETROM, ARPHRD_ETHER, ARPHRD_EETHER, ARPHRD_AX25,
287 ARPHRD_PRONET, ARPHRD_CHAOS, ARPHRD_IEEE802, ARPHRD_ARCNET,
288 ARPHRD_APPLETLK, ARPHRD_DLCI, ARPHRD_ATM, ARPHRD_METRICOM,
289 ARPHRD_IEEE1394, ARPHRD_EUI64, ARPHRD_INFINIBAND, ARPHRD_SLIP,
290 ARPHRD_CSLIP, ARPHRD_SLIP6, ARPHRD_CSLIP6, ARPHRD_RSRVD,
291 ARPHRD_ADAPT, ARPHRD_ROSE, ARPHRD_X25, ARPHRD_HWX25,
292 ARPHRD_PPP, ARPHRD_CISCO, ARPHRD_LAPB, ARPHRD_DDCMP,
293 ARPHRD_RAWHDLC, ARPHRD_TUNNEL, ARPHRD_TUNNEL6, ARPHRD_FRAD,
294 ARPHRD_SKIP, ARPHRD_LOOPBACK, ARPHRD_LOCALTLK, ARPHRD_FDDI,
295 ARPHRD_BIF, ARPHRD_SIT, ARPHRD_IPDDP, ARPHRD_IPGRE,
296 ARPHRD_PIMREG, ARPHRD_HIPPI, ARPHRD_ASH, ARPHRD_ECONET,
297 ARPHRD_IRDA, ARPHRD_FCPP, ARPHRD_FCAL, ARPHRD_FCPL,
298 ARPHRD_FCFABRIC, ARPHRD_IEEE80211, ARPHRD_IEEE80211_PRISM,
299 ARPHRD_IEEE80211_RADIOTAP, ARPHRD_PHONET, ARPHRD_PHONET_PIPE,
300 ARPHRD_IEEE802154, ARPHRD_VOID, ARPHRD_NONE};
301
302static const char *const netdev_lock_name[] = {
303 "_xmit_NETROM", "_xmit_ETHER", "_xmit_EETHER", "_xmit_AX25",
304 "_xmit_PRONET", "_xmit_CHAOS", "_xmit_IEEE802", "_xmit_ARCNET",
305 "_xmit_APPLETLK", "_xmit_DLCI", "_xmit_ATM", "_xmit_METRICOM",
306 "_xmit_IEEE1394", "_xmit_EUI64", "_xmit_INFINIBAND", "_xmit_SLIP",
307 "_xmit_CSLIP", "_xmit_SLIP6", "_xmit_CSLIP6", "_xmit_RSRVD",
308 "_xmit_ADAPT", "_xmit_ROSE", "_xmit_X25", "_xmit_HWX25",
309 "_xmit_PPP", "_xmit_CISCO", "_xmit_LAPB", "_xmit_DDCMP",
310 "_xmit_RAWHDLC", "_xmit_TUNNEL", "_xmit_TUNNEL6", "_xmit_FRAD",
311 "_xmit_SKIP", "_xmit_LOOPBACK", "_xmit_LOCALTLK", "_xmit_FDDI",
312 "_xmit_BIF", "_xmit_SIT", "_xmit_IPDDP", "_xmit_IPGRE",
313 "_xmit_PIMREG", "_xmit_HIPPI", "_xmit_ASH", "_xmit_ECONET",
314 "_xmit_IRDA", "_xmit_FCPP", "_xmit_FCAL", "_xmit_FCPL",
315 "_xmit_FCFABRIC", "_xmit_IEEE80211", "_xmit_IEEE80211_PRISM",
316 "_xmit_IEEE80211_RADIOTAP", "_xmit_PHONET", "_xmit_PHONET_PIPE",
317 "_xmit_IEEE802154", "_xmit_VOID", "_xmit_NONE"};
318
319static struct lock_class_key netdev_xmit_lock_key[ARRAY_SIZE(netdev_lock_type)];
320static struct lock_class_key netdev_addr_lock_key[ARRAY_SIZE(netdev_lock_type)];
321
322static inline unsigned short netdev_lock_pos(unsigned short dev_type)
323{
324 int i;
325
326 for (i = 0; i < ARRAY_SIZE(netdev_lock_type); i++)
327 if (netdev_lock_type[i] == dev_type)
328 return i;
329 /* the last key is used by default */
330 return ARRAY_SIZE(netdev_lock_type) - 1;
331}
332
333static inline void netdev_set_xmit_lockdep_class(spinlock_t *lock,
334 unsigned short dev_type)
335{
336 int i;
337
338 i = netdev_lock_pos(dev_type);
339 lockdep_set_class_and_name(lock, &netdev_xmit_lock_key[i],
340 netdev_lock_name[i]);
341}
342
343static inline void netdev_set_addr_lockdep_class(struct net_device *dev)
344{
345 int i;
346
347 i = netdev_lock_pos(dev->type);
348 lockdep_set_class_and_name(&dev->addr_list_lock,
349 &netdev_addr_lock_key[i],
350 netdev_lock_name[i]);
351}
352#else
353static inline void netdev_set_xmit_lockdep_class(spinlock_t *lock,
354 unsigned short dev_type)
355{
356}
357static inline void netdev_set_addr_lockdep_class(struct net_device *dev)
358{
359}
360#endif
361
362/******************************************************************************* 280/*******************************************************************************
363 * 281 *
364 * Protocol management and registration routines 282 * Protocol management and registration routines
@@ -8799,7 +8717,7 @@ static void netdev_init_one_queue(struct net_device *dev,
8799{ 8717{
8800 /* Initialize queue lock */ 8718 /* Initialize queue lock */
8801 spin_lock_init(&queue->_xmit_lock); 8719 spin_lock_init(&queue->_xmit_lock);
8802 netdev_set_xmit_lockdep_class(&queue->_xmit_lock, dev->type); 8720 lockdep_set_class(&queue->_xmit_lock, &dev->qdisc_xmit_lock_key);
8803 queue->xmit_lock_owner = -1; 8721 queue->xmit_lock_owner = -1;
8804 netdev_queue_numa_node_write(queue, NUMA_NO_NODE); 8722 netdev_queue_numa_node_write(queue, NUMA_NO_NODE);
8805 queue->dev = dev; 8723 queue->dev = dev;
@@ -8846,6 +8764,43 @@ void netif_tx_stop_all_queues(struct net_device *dev)
8846} 8764}
8847EXPORT_SYMBOL(netif_tx_stop_all_queues); 8765EXPORT_SYMBOL(netif_tx_stop_all_queues);
8848 8766
8767static void netdev_register_lockdep_key(struct net_device *dev)
8768{
8769 lockdep_register_key(&dev->qdisc_tx_busylock_key);
8770 lockdep_register_key(&dev->qdisc_running_key);
8771 lockdep_register_key(&dev->qdisc_xmit_lock_key);
8772 lockdep_register_key(&dev->addr_list_lock_key);
8773}
8774
8775static void netdev_unregister_lockdep_key(struct net_device *dev)
8776{
8777 lockdep_unregister_key(&dev->qdisc_tx_busylock_key);
8778 lockdep_unregister_key(&dev->qdisc_running_key);
8779 lockdep_unregister_key(&dev->qdisc_xmit_lock_key);
8780 lockdep_unregister_key(&dev->addr_list_lock_key);
8781}
8782
8783void netdev_update_lockdep_key(struct net_device *dev)
8784{
8785 struct netdev_queue *queue;
8786 int i;
8787
8788 lockdep_unregister_key(&dev->qdisc_xmit_lock_key);
8789 lockdep_unregister_key(&dev->addr_list_lock_key);
8790
8791 lockdep_register_key(&dev->qdisc_xmit_lock_key);
8792 lockdep_register_key(&dev->addr_list_lock_key);
8793
8794 lockdep_set_class(&dev->addr_list_lock, &dev->addr_list_lock_key);
8795 for (i = 0; i < dev->num_tx_queues; i++) {
8796 queue = netdev_get_tx_queue(dev, i);
8797
8798 lockdep_set_class(&queue->_xmit_lock,
8799 &dev->qdisc_xmit_lock_key);
8800 }
8801}
8802EXPORT_SYMBOL(netdev_update_lockdep_key);
8803
8849/** 8804/**
8850 * register_netdevice - register a network device 8805 * register_netdevice - register a network device
8851 * @dev: device to register 8806 * @dev: device to register
@@ -8880,7 +8835,7 @@ int register_netdevice(struct net_device *dev)
8880 BUG_ON(!net); 8835 BUG_ON(!net);
8881 8836
8882 spin_lock_init(&dev->addr_list_lock); 8837 spin_lock_init(&dev->addr_list_lock);
8883 netdev_set_addr_lockdep_class(dev); 8838 lockdep_set_class(&dev->addr_list_lock, &dev->addr_list_lock_key);
8884 8839
8885 ret = dev_get_valid_name(net, dev, dev->name); 8840 ret = dev_get_valid_name(net, dev, dev->name);
8886 if (ret < 0) 8841 if (ret < 0)
@@ -9390,6 +9345,8 @@ struct net_device *alloc_netdev_mqs(int sizeof_priv, const char *name,
9390 9345
9391 dev_net_set(dev, &init_net); 9346 dev_net_set(dev, &init_net);
9392 9347
9348 netdev_register_lockdep_key(dev);
9349
9393 dev->gso_max_size = GSO_MAX_SIZE; 9350 dev->gso_max_size = GSO_MAX_SIZE;
9394 dev->gso_max_segs = GSO_MAX_SEGS; 9351 dev->gso_max_segs = GSO_MAX_SEGS;
9395 dev->upper_level = 1; 9352 dev->upper_level = 1;
@@ -9474,6 +9431,8 @@ void free_netdev(struct net_device *dev)
9474 free_percpu(dev->pcpu_refcnt); 9431 free_percpu(dev->pcpu_refcnt);
9475 dev->pcpu_refcnt = NULL; 9432 dev->pcpu_refcnt = NULL;
9476 9433
9434 netdev_unregister_lockdep_key(dev);
9435
9477 /* Compatibility with error handling in drivers */ 9436 /* Compatibility with error handling in drivers */
9478 if (dev->reg_state == NETREG_UNINITIALIZED) { 9437 if (dev->reg_state == NETREG_UNINITIALIZED) {
9479 netdev_freemem(dev); 9438 netdev_freemem(dev);
diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c
index 1ee6460f8275..13493aae4e6c 100644
--- a/net/core/rtnetlink.c
+++ b/net/core/rtnetlink.c
@@ -2355,6 +2355,7 @@ static int do_set_master(struct net_device *dev, int ifindex,
2355 err = ops->ndo_del_slave(upper_dev, dev); 2355 err = ops->ndo_del_slave(upper_dev, dev);
2356 if (err) 2356 if (err)
2357 return err; 2357 return err;
2358 netdev_update_lockdep_key(dev);
2358 } else { 2359 } else {
2359 return -EOPNOTSUPP; 2360 return -EOPNOTSUPP;
2360 } 2361 }
diff --git a/net/dsa/master.c b/net/dsa/master.c
index a8e52c9967f4..3255dfc97f86 100644
--- a/net/dsa/master.c
+++ b/net/dsa/master.c
@@ -310,8 +310,6 @@ static void dsa_master_reset_mtu(struct net_device *dev)
310 rtnl_unlock(); 310 rtnl_unlock();
311} 311}
312 312
313static struct lock_class_key dsa_master_addr_list_lock_key;
314
315int dsa_master_setup(struct net_device *dev, struct dsa_port *cpu_dp) 313int dsa_master_setup(struct net_device *dev, struct dsa_port *cpu_dp)
316{ 314{
317 int ret; 315 int ret;
@@ -325,9 +323,6 @@ int dsa_master_setup(struct net_device *dev, struct dsa_port *cpu_dp)
325 wmb(); 323 wmb();
326 324
327 dev->dsa_ptr = cpu_dp; 325 dev->dsa_ptr = cpu_dp;
328 lockdep_set_class(&dev->addr_list_lock,
329 &dsa_master_addr_list_lock_key);
330
331 ret = dsa_master_ethtool_setup(dev); 326 ret = dsa_master_ethtool_setup(dev);
332 if (ret) 327 if (ret)
333 return ret; 328 return ret;
diff --git a/net/dsa/slave.c b/net/dsa/slave.c
index 75d58229a4bd..028e65f4b5ba 100644
--- a/net/dsa/slave.c
+++ b/net/dsa/slave.c
@@ -1341,15 +1341,6 @@ static int dsa_slave_phy_setup(struct net_device *slave_dev)
1341 return ret; 1341 return ret;
1342} 1342}
1343 1343
1344static struct lock_class_key dsa_slave_netdev_xmit_lock_key;
1345static void dsa_slave_set_lockdep_class_one(struct net_device *dev,
1346 struct netdev_queue *txq,
1347 void *_unused)
1348{
1349 lockdep_set_class(&txq->_xmit_lock,
1350 &dsa_slave_netdev_xmit_lock_key);
1351}
1352
1353int dsa_slave_suspend(struct net_device *slave_dev) 1344int dsa_slave_suspend(struct net_device *slave_dev)
1354{ 1345{
1355 struct dsa_port *dp = dsa_slave_to_port(slave_dev); 1346 struct dsa_port *dp = dsa_slave_to_port(slave_dev);
@@ -1433,9 +1424,6 @@ int dsa_slave_create(struct dsa_port *port)
1433 slave_dev->max_mtu = ETH_MAX_MTU; 1424 slave_dev->max_mtu = ETH_MAX_MTU;
1434 SET_NETDEV_DEVTYPE(slave_dev, &dsa_type); 1425 SET_NETDEV_DEVTYPE(slave_dev, &dsa_type);
1435 1426
1436 netdev_for_each_tx_queue(slave_dev, dsa_slave_set_lockdep_class_one,
1437 NULL);
1438
1439 SET_NETDEV_DEV(slave_dev, port->ds->dev); 1427 SET_NETDEV_DEV(slave_dev, port->ds->dev);
1440 slave_dev->dev.of_node = port->dn; 1428 slave_dev->dev.of_node = port->dn;
1441 slave_dev->vlan_features = master->vlan_features; 1429 slave_dev->vlan_features = master->vlan_features;
diff --git a/net/ieee802154/6lowpan/core.c b/net/ieee802154/6lowpan/core.c
index 3297e7fa9945..c0b107cdd715 100644
--- a/net/ieee802154/6lowpan/core.c
+++ b/net/ieee802154/6lowpan/core.c
@@ -58,13 +58,6 @@ static const struct header_ops lowpan_header_ops = {
58 .create = lowpan_header_create, 58 .create = lowpan_header_create,
59}; 59};
60 60
61static int lowpan_dev_init(struct net_device *ldev)
62{
63 netdev_lockdep_set_classes(ldev);
64
65 return 0;
66}
67
68static int lowpan_open(struct net_device *dev) 61static int lowpan_open(struct net_device *dev)
69{ 62{
70 if (!open_count) 63 if (!open_count)
@@ -96,7 +89,6 @@ static int lowpan_get_iflink(const struct net_device *dev)
96} 89}
97 90
98static const struct net_device_ops lowpan_netdev_ops = { 91static const struct net_device_ops lowpan_netdev_ops = {
99 .ndo_init = lowpan_dev_init,
100 .ndo_start_xmit = lowpan_xmit, 92 .ndo_start_xmit = lowpan_xmit,
101 .ndo_open = lowpan_open, 93 .ndo_open = lowpan_open,
102 .ndo_stop = lowpan_stop, 94 .ndo_stop = lowpan_stop,
diff --git a/net/l2tp/l2tp_eth.c b/net/l2tp/l2tp_eth.c
index fd5ac2788e45..d3b520b9b2c9 100644
--- a/net/l2tp/l2tp_eth.c
+++ b/net/l2tp/l2tp_eth.c
@@ -56,7 +56,6 @@ static int l2tp_eth_dev_init(struct net_device *dev)
56{ 56{
57 eth_hw_addr_random(dev); 57 eth_hw_addr_random(dev);
58 eth_broadcast_addr(dev->broadcast); 58 eth_broadcast_addr(dev->broadcast);
59 netdev_lockdep_set_classes(dev);
60 59
61 return 0; 60 return 0;
62} 61}
diff --git a/net/netrom/af_netrom.c b/net/netrom/af_netrom.c
index c4f54ad2b98a..58d5373c513c 100644
--- a/net/netrom/af_netrom.c
+++ b/net/netrom/af_netrom.c
@@ -64,28 +64,6 @@ static DEFINE_SPINLOCK(nr_list_lock);
64static const struct proto_ops nr_proto_ops; 64static const struct proto_ops nr_proto_ops;
65 65
66/* 66/*
67 * NETROM network devices are virtual network devices encapsulating NETROM
68 * frames into AX.25 which will be sent through an AX.25 device, so form a
69 * special "super class" of normal net devices; split their locks off into a
70 * separate class since they always nest.
71 */
72static struct lock_class_key nr_netdev_xmit_lock_key;
73static struct lock_class_key nr_netdev_addr_lock_key;
74
75static void nr_set_lockdep_one(struct net_device *dev,
76 struct netdev_queue *txq,
77 void *_unused)
78{
79 lockdep_set_class(&txq->_xmit_lock, &nr_netdev_xmit_lock_key);
80}
81
82static void nr_set_lockdep_key(struct net_device *dev)
83{
84 lockdep_set_class(&dev->addr_list_lock, &nr_netdev_addr_lock_key);
85 netdev_for_each_tx_queue(dev, nr_set_lockdep_one, NULL);
86}
87
88/*
89 * Socket removal during an interrupt is now safe. 67 * Socket removal during an interrupt is now safe.
90 */ 68 */
91static void nr_remove_socket(struct sock *sk) 69static void nr_remove_socket(struct sock *sk)
@@ -1414,7 +1392,6 @@ static int __init nr_proto_init(void)
1414 free_netdev(dev); 1392 free_netdev(dev);
1415 goto fail; 1393 goto fail;
1416 } 1394 }
1417 nr_set_lockdep_key(dev);
1418 dev_nr[i] = dev; 1395 dev_nr[i] = dev;
1419 } 1396 }
1420 1397
diff --git a/net/rose/af_rose.c b/net/rose/af_rose.c
index f0e9ccf472a9..6a0df7c8a939 100644
--- a/net/rose/af_rose.c
+++ b/net/rose/af_rose.c
@@ -65,28 +65,6 @@ static const struct proto_ops rose_proto_ops;
65ax25_address rose_callsign; 65ax25_address rose_callsign;
66 66
67/* 67/*
68 * ROSE network devices are virtual network devices encapsulating ROSE
69 * frames into AX.25 which will be sent through an AX.25 device, so form a
70 * special "super class" of normal net devices; split their locks off into a
71 * separate class since they always nest.
72 */
73static struct lock_class_key rose_netdev_xmit_lock_key;
74static struct lock_class_key rose_netdev_addr_lock_key;
75
76static void rose_set_lockdep_one(struct net_device *dev,
77 struct netdev_queue *txq,
78 void *_unused)
79{
80 lockdep_set_class(&txq->_xmit_lock, &rose_netdev_xmit_lock_key);
81}
82
83static void rose_set_lockdep_key(struct net_device *dev)
84{
85 lockdep_set_class(&dev->addr_list_lock, &rose_netdev_addr_lock_key);
86 netdev_for_each_tx_queue(dev, rose_set_lockdep_one, NULL);
87}
88
89/*
90 * Convert a ROSE address into text. 68 * Convert a ROSE address into text.
91 */ 69 */
92char *rose2asc(char *buf, const rose_address *addr) 70char *rose2asc(char *buf, const rose_address *addr)
@@ -1533,7 +1511,6 @@ static int __init rose_proto_init(void)
1533 free_netdev(dev); 1511 free_netdev(dev);
1534 goto fail; 1512 goto fail;
1535 } 1513 }
1536 rose_set_lockdep_key(dev);
1537 dev_rose[i] = dev; 1514 dev_rose[i] = dev;
1538 } 1515 }
1539 1516
diff --git a/net/sched/sch_generic.c b/net/sched/sch_generic.c
index 17bd8f539bc7..b2d34c49cbe6 100644
--- a/net/sched/sch_generic.c
+++ b/net/sched/sch_generic.c
@@ -799,9 +799,6 @@ struct Qdisc_ops pfifo_fast_ops __read_mostly = {
799}; 799};
800EXPORT_SYMBOL(pfifo_fast_ops); 800EXPORT_SYMBOL(pfifo_fast_ops);
801 801
802static struct lock_class_key qdisc_tx_busylock;
803static struct lock_class_key qdisc_running_key;
804
805struct Qdisc *qdisc_alloc(struct netdev_queue *dev_queue, 802struct Qdisc *qdisc_alloc(struct netdev_queue *dev_queue,
806 const struct Qdisc_ops *ops, 803 const struct Qdisc_ops *ops,
807 struct netlink_ext_ack *extack) 804 struct netlink_ext_ack *extack)
@@ -854,17 +851,9 @@ struct Qdisc *qdisc_alloc(struct netdev_queue *dev_queue,
854 } 851 }
855 852
856 spin_lock_init(&sch->busylock); 853 spin_lock_init(&sch->busylock);
857 lockdep_set_class(&sch->busylock,
858 dev->qdisc_tx_busylock ?: &qdisc_tx_busylock);
859
860 /* seqlock has the same scope of busylock, for NOLOCK qdisc */ 854 /* seqlock has the same scope of busylock, for NOLOCK qdisc */
861 spin_lock_init(&sch->seqlock); 855 spin_lock_init(&sch->seqlock);
862 lockdep_set_class(&sch->busylock,
863 dev->qdisc_tx_busylock ?: &qdisc_tx_busylock);
864
865 seqcount_init(&sch->running); 856 seqcount_init(&sch->running);
866 lockdep_set_class(&sch->running,
867 dev->qdisc_running_key ?: &qdisc_running_key);
868 857
869 sch->ops = ops; 858 sch->ops = ops;
870 sch->flags = ops->static_flags; 859 sch->flags = ops->static_flags;
@@ -875,6 +864,12 @@ struct Qdisc *qdisc_alloc(struct netdev_queue *dev_queue,
875 dev_hold(dev); 864 dev_hold(dev);
876 refcount_set(&sch->refcnt, 1); 865 refcount_set(&sch->refcnt, 1);
877 866
867 if (sch != &noop_qdisc) {
868 lockdep_set_class(&sch->busylock, &dev->qdisc_tx_busylock_key);
869 lockdep_set_class(&sch->seqlock, &dev->qdisc_tx_busylock_key);
870 lockdep_set_class(&sch->running, &dev->qdisc_running_key);
871 }
872
878 return sch; 873 return sch;
879errout1: 874errout1:
880 kfree(p); 875 kfree(p);