diff options
| author | Ingo Molnar <mingo@kernel.org> | 2024-03-25 13:32:29 +0300 | 
|---|---|---|
| committer | Ingo Molnar <mingo@kernel.org> | 2024-03-25 13:32:29 +0300 | 
| commit | f4566a1e73957800df75a3dd2dccee8a4697f327 (patch) | |
| tree | b043b875228c0b25988af66c680d60cae69d761d /net/xfrm/xfrm_interface_core.c | |
| parent | b9e6e28663928cab836a19abbdec3d036a07db3b (diff) | |
| parent | 4cece764965020c22cff7665b18a012006359095 (diff) | |
| download | linux-f4566a1e73957800df75a3dd2dccee8a4697f327.tar.xz | |
Merge tag 'v6.9-rc1' into sched/core, to pick up fixes and to refresh the branch
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'net/xfrm/xfrm_interface_core.c')
| -rw-r--r-- | net/xfrm/xfrm_interface_core.c | 26 | 
1 files changed, 9 insertions, 17 deletions
diff --git a/net/xfrm/xfrm_interface_core.c b/net/xfrm/xfrm_interface_core.c index 21d50d75c260..4df5c06e3ece 100644 --- a/net/xfrm/xfrm_interface_core.c +++ b/net/xfrm/xfrm_interface_core.c @@ -240,7 +240,6 @@ static void xfrmi_dev_free(struct net_device *dev)  	struct xfrm_if *xi = netdev_priv(dev);  	gro_cells_destroy(&xi->gro_cells); -	free_percpu(dev->tstats);  }  static int xfrmi_create(struct net_device *dev) @@ -727,7 +726,7 @@ static int xfrmi_get_iflink(const struct net_device *dev)  {  	struct xfrm_if *xi = netdev_priv(dev); -	return xi->p.link; +	return READ_ONCE(xi->p.link);  }  static const struct net_device_ops xfrmi_netdev_ops = { @@ -749,6 +748,7 @@ static void xfrmi_dev_setup(struct net_device *dev)  	dev->flags 		= IFF_NOARP;  	dev->needs_free_netdev	= true;  	dev->priv_destructor	= xfrmi_dev_free; +	dev->pcpu_stat_type	= NETDEV_PCPU_STAT_TSTATS;  	netif_keep_dst(dev);  	eth_broadcast_addr(dev->broadcast); @@ -765,15 +765,9 @@ static int xfrmi_dev_init(struct net_device *dev)  	struct net_device *phydev = __dev_get_by_index(xi->net, xi->p.link);  	int err; -	dev->tstats = netdev_alloc_pcpu_stats(struct pcpu_sw_netstats); -	if (!dev->tstats) -		return -ENOMEM; -  	err = gro_cells_init(&xi->gro_cells, dev); -	if (err) { -		free_percpu(dev->tstats); +	if (err)  		return err; -	}  	dev->features |= NETIF_F_LLTX;  	dev->features |= XFRMI_FEATURES; @@ -957,12 +951,12 @@ static struct rtnl_link_ops xfrmi_link_ops __read_mostly = {  	.get_link_net	= xfrmi_get_link_net,  }; -static void __net_exit xfrmi_exit_batch_net(struct list_head *net_exit_list) +static void __net_exit xfrmi_exit_batch_rtnl(struct list_head *net_exit_list, +					     struct list_head *dev_to_kill)  {  	struct net *net; -	LIST_HEAD(list); -	rtnl_lock(); +	ASSERT_RTNL();  	list_for_each_entry(net, net_exit_list, exit_list) {  		struct xfrmi_net *xfrmn = net_generic(net, xfrmi_net_id);  		struct xfrm_if __rcu **xip; @@ -973,18 +967,16 @@ static void __net_exit xfrmi_exit_batch_net(struct list_head *net_exit_list)  			for (xip = &xfrmn->xfrmi[i];  			     (xi = rtnl_dereference(*xip)) != NULL;  			     xip = &xi->next) -				unregister_netdevice_queue(xi->dev, &list); +				unregister_netdevice_queue(xi->dev, dev_to_kill);  		}  		xi = rtnl_dereference(xfrmn->collect_md_xfrmi);  		if (xi) -			unregister_netdevice_queue(xi->dev, &list); +			unregister_netdevice_queue(xi->dev, dev_to_kill);  	} -	unregister_netdevice_many(&list); -	rtnl_unlock();  }  static struct pernet_operations xfrmi_net_ops = { -	.exit_batch = xfrmi_exit_batch_net, +	.exit_batch_rtnl = xfrmi_exit_batch_rtnl,  	.id   = &xfrmi_net_id,  	.size = sizeof(struct xfrmi_net),  };  | 
