mirror of
https://github.com/torvalds/linux.git
synced 2024-12-29 14:21:47 +00:00
veth: create by default nr_possible_cpus queues
This allows easier XDP usage. The number of default active queues is not changed: 1 RX and 1 TX so that this does not introduce overhead on the datapath for queue selection. v1 -> v2: - drop the module parameter, force default to nr_possible_cpus - Toke Signed-off-by: Paolo Abeni <pabeni@redhat.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
4752eeb3d8
commit
9d3684c24a
@ -1609,6 +1609,23 @@ static void veth_disable_gro(struct net_device *dev)
|
||||
netdev_update_features(dev);
|
||||
}
|
||||
|
||||
static int veth_init_queues(struct net_device *dev, struct nlattr *tb[])
|
||||
{
|
||||
int err;
|
||||
|
||||
if (!tb[IFLA_NUM_TX_QUEUES] && dev->num_tx_queues > 1) {
|
||||
err = netif_set_real_num_tx_queues(dev, 1);
|
||||
if (err)
|
||||
return err;
|
||||
}
|
||||
if (!tb[IFLA_NUM_RX_QUEUES] && dev->num_rx_queues > 1) {
|
||||
err = netif_set_real_num_rx_queues(dev, 1);
|
||||
if (err)
|
||||
return err;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int veth_newlink(struct net *src_net, struct net_device *dev,
|
||||
struct nlattr *tb[], struct nlattr *data[],
|
||||
struct netlink_ext_ack *extack)
|
||||
@ -1718,13 +1735,21 @@ static int veth_newlink(struct net *src_net, struct net_device *dev,
|
||||
|
||||
priv = netdev_priv(dev);
|
||||
rcu_assign_pointer(priv->peer, peer);
|
||||
err = veth_init_queues(dev, tb);
|
||||
if (err)
|
||||
goto err_queues;
|
||||
|
||||
priv = netdev_priv(peer);
|
||||
rcu_assign_pointer(priv->peer, dev);
|
||||
err = veth_init_queues(peer, tb);
|
||||
if (err)
|
||||
goto err_queues;
|
||||
|
||||
veth_disable_gro(dev);
|
||||
return 0;
|
||||
|
||||
err_queues:
|
||||
unregister_netdevice(dev);
|
||||
err_register_dev:
|
||||
/* nothing to do */
|
||||
err_configure_peer:
|
||||
@ -1770,6 +1795,16 @@ static struct net *veth_get_link_net(const struct net_device *dev)
|
||||
return peer ? dev_net(peer) : dev_net(dev);
|
||||
}
|
||||
|
||||
static unsigned int veth_get_num_queues(void)
|
||||
{
|
||||
/* enforce the same queue limit as rtnl_create_link */
|
||||
int queues = num_possible_cpus();
|
||||
|
||||
if (queues > 4096)
|
||||
queues = 4096;
|
||||
return queues;
|
||||
}
|
||||
|
||||
static struct rtnl_link_ops veth_link_ops = {
|
||||
.kind = DRV_NAME,
|
||||
.priv_size = sizeof(struct veth_priv),
|
||||
@ -1780,6 +1815,8 @@ static struct rtnl_link_ops veth_link_ops = {
|
||||
.policy = veth_policy,
|
||||
.maxtype = VETH_INFO_MAX,
|
||||
.get_link_net = veth_get_link_net,
|
||||
.get_num_tx_queues = veth_get_num_queues,
|
||||
.get_num_rx_queues = veth_get_num_queues,
|
||||
};
|
||||
|
||||
/*
|
||||
|
Loading…
Reference in New Issue
Block a user