Skip to content

Commit 9d3684c

Browse files
Paolo Abenidavem330
authored andcommitted
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>
1 parent 4752eeb commit 9d3684c

File tree

1 file changed

+37
-0
lines changed

1 file changed

+37
-0
lines changed

drivers/net/veth.c

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1609,6 +1609,23 @@ static void veth_disable_gro(struct net_device *dev)
16091609
netdev_update_features(dev);
16101610
}
16111611

1612+
static int veth_init_queues(struct net_device *dev, struct nlattr *tb[])
1613+
{
1614+
int err;
1615+
1616+
if (!tb[IFLA_NUM_TX_QUEUES] && dev->num_tx_queues > 1) {
1617+
err = netif_set_real_num_tx_queues(dev, 1);
1618+
if (err)
1619+
return err;
1620+
}
1621+
if (!tb[IFLA_NUM_RX_QUEUES] && dev->num_rx_queues > 1) {
1622+
err = netif_set_real_num_rx_queues(dev, 1);
1623+
if (err)
1624+
return err;
1625+
}
1626+
return 0;
1627+
}
1628+
16121629
static int veth_newlink(struct net *src_net, struct net_device *dev,
16131630
struct nlattr *tb[], struct nlattr *data[],
16141631
struct netlink_ext_ack *extack)
@@ -1718,13 +1735,21 @@ static int veth_newlink(struct net *src_net, struct net_device *dev,
17181735

17191736
priv = netdev_priv(dev);
17201737
rcu_assign_pointer(priv->peer, peer);
1738+
err = veth_init_queues(dev, tb);
1739+
if (err)
1740+
goto err_queues;
17211741

17221742
priv = netdev_priv(peer);
17231743
rcu_assign_pointer(priv->peer, dev);
1744+
err = veth_init_queues(peer, tb);
1745+
if (err)
1746+
goto err_queues;
17241747

17251748
veth_disable_gro(dev);
17261749
return 0;
17271750

1751+
err_queues:
1752+
unregister_netdevice(dev);
17281753
err_register_dev:
17291754
/* nothing to do */
17301755
err_configure_peer:
@@ -1770,6 +1795,16 @@ static struct net *veth_get_link_net(const struct net_device *dev)
17701795
return peer ? dev_net(peer) : dev_net(dev);
17711796
}
17721797

1798+
static unsigned int veth_get_num_queues(void)
1799+
{
1800+
/* enforce the same queue limit as rtnl_create_link */
1801+
int queues = num_possible_cpus();
1802+
1803+
if (queues > 4096)
1804+
queues = 4096;
1805+
return queues;
1806+
}
1807+
17731808
static struct rtnl_link_ops veth_link_ops = {
17741809
.kind = DRV_NAME,
17751810
.priv_size = sizeof(struct veth_priv),
@@ -1780,6 +1815,8 @@ static struct rtnl_link_ops veth_link_ops = {
17801815
.policy = veth_policy,
17811816
.maxtype = VETH_INFO_MAX,
17821817
.get_link_net = veth_get_link_net,
1818+
.get_num_tx_queues = veth_get_num_queues,
1819+
.get_num_rx_queues = veth_get_num_queues,
17831820
};
17841821

17851822
/*

0 commit comments

Comments
 (0)