Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit ab92d68

Browse files
TaeheeYoodavem330
authored andcommitted
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 <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 5343da4 commit ab92d68

File tree

25 files changed

+63
-356
lines changed

25 files changed

+63
-356
lines changed

drivers/net/bonding/bond_main.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4769,7 +4769,6 @@ static int bond_init(struct net_device *bond_dev)
47694769
return -ENOMEM;
47704770

47714771
bond->nest_level = SINGLE_DEPTH_NESTING;
4772-
netdev_lockdep_set_classes(bond_dev);
47734772

47744773
list_add_tail(&bond->bond_list, &bn->dev_list);
47754774

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

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -299,22 +299,6 @@ 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-
static struct lock_class_key nfp_repr_netdev_addr_lock_key;
304-
305-
static 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-
312-
static 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-
318302
int nfp_repr_init(struct nfp_app *app, struct net_device *netdev,
319303
u32 cmsg_port_id, struct nfp_port *port,
320304
struct net_device *pf_netdev)
@@ -324,8 +308,6 @@ int nfp_repr_init(struct nfp_app *app, struct net_device *netdev,
324308
u32 repr_cap = nn->tlv_caps.repr_cap;
325309
int err;
326310

327-
nfp_repr_set_lockdep_class(netdev);
328-
329311
repr->port = port;
330312
repr->dst = metadata_dst_alloc(0, METADATA_HW_PORT_MUX, GFP_KERNEL);
331313
if (!repr->dst)

drivers/net/hamradio/bpqether.c

Lines changed: 0 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -107,27 +107,6 @@ 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-
static struct lock_class_key bpq_netdev_addr_lock_key;
117-
118-
static 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-
125-
static 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-
131110
/* ------------------------------------------------------------------------ */
132111

133112

@@ -498,7 +477,6 @@ static int bpq_new_device(struct net_device *edev)
498477
err = register_netdevice(ndev);
499478
if (err)
500479
goto error;
501-
bpq_set_lockdep_class(ndev);
502480

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

drivers/net/hyperv/netvsc_drv.c

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

2338-
netdev_lockdep_set_classes(net);
2339-
23402338
/* MTU range: 68 - 1500 or 65521 */
23412339
net->min_mtu = NETVSC_MTU_MIN;
23422340
if (nvdev->nvsp_version >= NVSP_PROTOCOL_VERSION_2)

drivers/net/ipvlan/ipvlan_main.c

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -131,8 +131,6 @@ 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-
136134
ipvlan->pcpu_stats = netdev_alloc_pcpu_stats(struct ipvl_pcpu_stats);
137135
if (!ipvlan->pcpu_stats)
138136
return -ENOMEM;

drivers/net/macsec.c

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2750,7 +2750,6 @@ static netdev_tx_t macsec_start_xmit(struct sk_buff *skb,
27502750

27512751
#define MACSEC_FEATURES \
27522752
(NETIF_F_SG | NETIF_F_HIGHDMA | NETIF_F_FRAGLIST)
2753-
static struct lock_class_key macsec_netdev_addr_lock_key;
27542753

27552754
static int macsec_dev_init(struct net_device *dev)
27562755
{
@@ -3264,10 +3263,6 @@ static int macsec_newlink(struct net *net, struct net_device *dev,
32643263
dev_hold(real_dev);
32653264

32663265
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));
32713266

32723267
err = netdev_upper_dev_link(real_dev, dev, extack);
32733268
if (err < 0)

drivers/net/macvlan.c

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -852,8 +852,6 @@ static int macvlan_do_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
852852
* "super class" of normal network devices; split their locks off into a
853853
* separate class since they always nest.
854854
*/
855-
static struct lock_class_key macvlan_netdev_addr_lock_key;
856-
857855
#define ALWAYS_ON_OFFLOADS \
858856
(NETIF_F_SG | NETIF_F_HW_CSUM | NETIF_F_GSO_SOFTWARE | \
859857
NETIF_F_GSO_ROBUST | NETIF_F_GSO_ENCAP_ALL)
@@ -874,14 +872,6 @@ static int macvlan_get_nest_level(struct net_device *dev)
874872
return ((struct macvlan_dev *)netdev_priv(dev))->nest_level;
875873
}
876874

877-
static 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-
885875
static int macvlan_init(struct net_device *dev)
886876
{
887877
struct macvlan_dev *vlan = netdev_priv(dev);
@@ -900,8 +890,6 @@ static int macvlan_init(struct net_device *dev)
900890
dev->gso_max_segs = lowerdev->gso_max_segs;
901891
dev->hard_header_len = lowerdev->hard_header_len;
902892

903-
macvlan_set_lockdep_class(dev);
904-
905893
vlan->pcpu_stats = netdev_alloc_pcpu_stats(struct vlan_pcpu_stats);
906894
if (!vlan->pcpu_stats)
907895
return -ENOMEM;

drivers/net/ppp/ppp_generic.c

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1324,8 +1324,6 @@ static int ppp_dev_init(struct net_device *dev)
13241324
{
13251325
struct ppp *ppp;
13261326

1327-
netdev_lockdep_set_classes(dev);
1328-
13291327
ppp = netdev_priv(dev);
13301328
/* Let the netdevice take a reference on the ppp file. This ensures
13311329
* that ppp_destroy_interface() won't run before the device gets

drivers/net/team/team.c

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1642,8 +1642,6 @@ static int team_init(struct net_device *dev)
16421642
goto err_options_register;
16431643
netif_carrier_off(dev);
16441644

1645-
netdev_lockdep_set_classes(dev);
1646-
16471645
return 0;
16481646

16491647
err_options_register:

drivers/net/vrf.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -865,7 +865,6 @@ static int vrf_dev_init(struct net_device *dev)
865865

866866
/* similarly, oper state is irrelevant; set to up to avoid confusion */
867867
dev->operstate = IF_OPER_UP;
868-
netdev_lockdep_set_classes(dev);
869868
return 0;
870869

871870
out_rth:

0 commit comments

Comments
 (0)