Skip to content

Commit 185e5b8

Browse files
Eric Dumazetkuba-moo
authored andcommitted
net: introduce netdev_napi_exit()
After 1b23cdb ("net: protect netdev->napi_list with netdev_lock()") it makes sense to iterate through dev->napi_list while holding the device lock. Also call synchronize_net() at most one time. Signed-off-by: Eric Dumazet <[email protected]> Link: https://patch.msgid.link/[email protected] Signed-off-by: Jakub Kicinski <[email protected]>
1 parent 12d5151 commit 185e5b8

File tree

1 file changed

+17
-6
lines changed

1 file changed

+17
-6
lines changed

net/core/dev.c

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11568,6 +11568,22 @@ struct net_device *alloc_netdev_mqs(int sizeof_priv, const char *name,
1156811568
}
1156911569
EXPORT_SYMBOL(alloc_netdev_mqs);
1157011570

11571+
static void netdev_napi_exit(struct net_device *dev)
11572+
{
11573+
if (!list_empty(&dev->napi_list)) {
11574+
struct napi_struct *p, *n;
11575+
11576+
netdev_lock(dev);
11577+
list_for_each_entry_safe(p, n, &dev->napi_list, dev_list)
11578+
__netif_napi_del_locked(p);
11579+
netdev_unlock(dev);
11580+
11581+
synchronize_net();
11582+
}
11583+
11584+
kvfree(dev->napi_config);
11585+
}
11586+
1157111587
/**
1157211588
* free_netdev - free network device
1157311589
* @dev: device
@@ -11579,8 +11595,6 @@ EXPORT_SYMBOL(alloc_netdev_mqs);
1157911595
*/
1158011596
void free_netdev(struct net_device *dev)
1158111597
{
11582-
struct napi_struct *p, *n;
11583-
1158411598
might_sleep();
1158511599

1158611600
/* When called immediately after register_netdevice() failed the unwind
@@ -11602,10 +11616,7 @@ void free_netdev(struct net_device *dev)
1160211616
/* Flush device addresses */
1160311617
dev_addr_flush(dev);
1160411618

11605-
list_for_each_entry_safe(p, n, &dev->napi_list, dev_list)
11606-
netif_napi_del(p);
11607-
11608-
kvfree(dev->napi_config);
11619+
netdev_napi_exit(dev);
1160911620

1161011621
ref_tracker_dir_exit(&dev->refcnt_tracker);
1161111622
#ifdef CONFIG_PCPU_DEV_REFCNT

0 commit comments

Comments
 (0)