Skip to content

Commit 1a33e10

Browse files
congwangdavem330
authored andcommitted
net: partially revert dynamic lockdep key changes
This patch reverts the folowing commits: commit 064ff66 "bonding: add missing netdev_update_lockdep_key()" commit 53d3749 "net: avoid updating qdisc_xmit_lock_key in netdev_update_lockdep_key()" commit 1f26c0d "net: fix kernel-doc warning in <linux/netdevice.h>" commit ab92d68 "net: core: add generic lockdep keys" but keeps the addr_list_lock_key because we still lock addr_list_lock nestedly on stack devices, unlikely xmit_lock this is safe because we don't take addr_list_lock on any fast path. Reported-and-tested-by: [email protected] Cc: Dmitry Vyukov <[email protected]> Cc: Taehee Yoo <[email protected]> Signed-off-by: Cong Wang <[email protected]> Acked-by: Taehee Yoo <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent ea84c84 commit 1a33e10

File tree

22 files changed

+294
-33
lines changed

22 files changed

+294
-33
lines changed

drivers/net/bonding/bond_main.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4898,6 +4898,7 @@ static int bond_init(struct net_device *bond_dev)
48984898
spin_lock_init(&bond->stats_lock);
48994899
lockdep_register_key(&bond->stats_lock_key);
49004900
lockdep_set_class(&bond->stats_lock, &bond->stats_lock_key);
4901+
netdev_lockdep_set_classes(bond_dev);
49014902

49024903
list_add_tail(&bond->bond_list, &bn->dev_list);
49034904

drivers/net/ethernet/netronome/nfp/nfp_net_repr.c

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -299,6 +299,20 @@ static void nfp_repr_clean(struct nfp_repr *repr)
299299
nfp_port_free(repr->port);
300300
}
301301

302+
static struct lock_class_key nfp_repr_netdev_xmit_lock_key;
303+
304+
static void nfp_repr_set_lockdep_class_one(struct net_device *dev,
305+
struct netdev_queue *txq,
306+
void *_unused)
307+
{
308+
lockdep_set_class(&txq->_xmit_lock, &nfp_repr_netdev_xmit_lock_key);
309+
}
310+
311+
static void nfp_repr_set_lockdep_class(struct net_device *dev)
312+
{
313+
netdev_for_each_tx_queue(dev, nfp_repr_set_lockdep_class_one, NULL);
314+
}
315+
302316
int nfp_repr_init(struct nfp_app *app, struct net_device *netdev,
303317
u32 cmsg_port_id, struct nfp_port *port,
304318
struct net_device *pf_netdev)
@@ -308,6 +322,8 @@ int nfp_repr_init(struct nfp_app *app, struct net_device *netdev,
308322
u32 repr_cap = nn->tlv_caps.repr_cap;
309323
int err;
310324

325+
nfp_repr_set_lockdep_class(netdev);
326+
311327
repr->port = port;
312328
repr->dst = metadata_dst_alloc(0, METADATA_HW_PORT_MUX, GFP_KERNEL);
313329
if (!repr->dst)

drivers/net/hamradio/bpqether.c

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,25 @@ struct bpqdev {
107107

108108
static LIST_HEAD(bpq_devices);
109109

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+
*/
115+
static struct lock_class_key bpq_netdev_xmit_lock_key;
116+
117+
static void bpq_set_lockdep_class_one(struct net_device *dev,
118+
struct netdev_queue *txq,
119+
void *_unused)
120+
{
121+
lockdep_set_class(&txq->_xmit_lock, &bpq_netdev_xmit_lock_key);
122+
}
123+
124+
static void bpq_set_lockdep_class(struct net_device *dev)
125+
{
126+
netdev_for_each_tx_queue(dev, bpq_set_lockdep_class_one, NULL);
127+
}
128+
110129
/* ------------------------------------------------------------------------ */
111130

112131

@@ -477,6 +496,7 @@ static int bpq_new_device(struct net_device *edev)
477496
err = register_netdevice(ndev);
478497
if (err)
479498
goto error;
499+
bpq_set_lockdep_class(ndev);
480500

481501
/* List protected by RTNL */
482502
list_add_rcu(&bpq->bpq_list, &bpq_devices);

drivers/net/hyperv/netvsc_drv.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2456,6 +2456,8 @@ static int netvsc_probe(struct hv_device *dev,
24562456
NETIF_F_HW_VLAN_CTAG_RX;
24572457
net->vlan_features = net->features;
24582458

2459+
netdev_lockdep_set_classes(net);
2460+
24592461
/* MTU range: 68 - 1500 or 65521 */
24602462
net->min_mtu = NETVSC_MTU_MIN;
24612463
if (nvdev->nvsp_version >= NVSP_PROTOCOL_VERSION_2)

drivers/net/ipvlan/ipvlan_main.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,8 @@ static int ipvlan_init(struct net_device *dev)
131131
dev->gso_max_segs = phy_dev->gso_max_segs;
132132
dev->hard_header_len = phy_dev->hard_header_len;
133133

134+
netdev_lockdep_set_classes(dev);
135+
134136
ipvlan->pcpu_stats = netdev_alloc_pcpu_stats(struct ipvl_pcpu_stats);
135137
if (!ipvlan->pcpu_stats)
136138
return -ENOMEM;

drivers/net/macsec.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4047,6 +4047,8 @@ static int macsec_newlink(struct net *net, struct net_device *dev,
40474047
if (err < 0)
40484048
return err;
40494049

4050+
netdev_lockdep_set_classes(dev);
4051+
40504052
err = netdev_upper_dev_link(real_dev, dev, extack);
40514053
if (err < 0)
40524054
goto unregister;

drivers/net/macvlan.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -890,6 +890,8 @@ static int macvlan_init(struct net_device *dev)
890890
dev->gso_max_segs = lowerdev->gso_max_segs;
891891
dev->hard_header_len = lowerdev->hard_header_len;
892892

893+
netdev_lockdep_set_classes(dev);
894+
893895
vlan->pcpu_stats = netdev_alloc_pcpu_stats(struct vlan_pcpu_stats);
894896
if (!vlan->pcpu_stats)
895897
return -ENOMEM;

drivers/net/ppp/ppp_generic.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1410,6 +1410,8 @@ static int ppp_dev_init(struct net_device *dev)
14101410
{
14111411
struct ppp *ppp;
14121412

1413+
netdev_lockdep_set_classes(dev);
1414+
14131415
ppp = netdev_priv(dev);
14141416
/* Let the netdevice take a reference on the ppp file. This ensures
14151417
* that ppp_destroy_interface() won't run before the device gets

drivers/net/team/team.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1647,6 +1647,7 @@ static int team_init(struct net_device *dev)
16471647

16481648
lockdep_register_key(&team->team_lock_key);
16491649
__mutex_init(&team->lock, "team->team_lock_key", &team->team_lock_key);
1650+
netdev_lockdep_set_classes(dev);
16501651

16511652
return 0;
16521653

drivers/net/vrf.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -867,6 +867,7 @@ static int vrf_dev_init(struct net_device *dev)
867867

868868
/* similarly, oper state is irrelevant; set to up to avoid confusion */
869869
dev->operstate = IF_OPER_UP;
870+
netdev_lockdep_set_classes(dev);
870871
return 0;
871872

872873
out_rth:

0 commit comments

Comments
 (0)