diff options
| author | David S. Miller <davem@davemloft.net> | 2021-08-04 12:05:13 +0300 |
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2021-08-04 12:05:13 +0300 |
| commit | 8730379ee067ccbd2ea24eb02ea623d688e9707b (patch) | |
| tree | ca67c02d5b39d10117e6f2caae0330b2ded15cb6 /net | |
| parent | 8679c31e0284aa3aaba038035e443180b5bacb99 (diff) | |
| parent | e874f4557b365fc07f960c0e5a224f9ecaedd838 (diff) | |
| download | linux-8730379ee067ccbd2ea24eb02ea623d688e9707b.tar.xz | |
Merge branch 'queues'
Jakub Kicinski says:
====================
net: add netif_set_real_num_queues() for device reconfig
This short set adds a helper to make the implementation of
two-phase NIC reconfig easier.
====================
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net')
| -rw-r--r-- | net/core/dev.c | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/net/core/dev.c b/net/core/dev.c index 4a1401008db9..360cb2f1b1e9 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -2974,6 +2974,50 @@ EXPORT_SYMBOL(netif_set_real_num_rx_queues); #endif /** + * netif_set_real_num_queues - set actual number of RX and TX queues used + * @dev: Network device + * @txq: Actual number of TX queues + * @rxq: Actual number of RX queues + * + * Set the real number of both TX and RX queues. + * Does nothing if the number of queues is already correct. + */ +int netif_set_real_num_queues(struct net_device *dev, + unsigned int txq, unsigned int rxq) +{ + unsigned int old_rxq = dev->real_num_rx_queues; + int err; + + if (txq < 1 || txq > dev->num_tx_queues || + rxq < 1 || rxq > dev->num_rx_queues) + return -EINVAL; + + /* Start from increases, so the error path only does decreases - + * decreases can't fail. + */ + if (rxq > dev->real_num_rx_queues) { + err = netif_set_real_num_rx_queues(dev, rxq); + if (err) + return err; + } + if (txq > dev->real_num_tx_queues) { + err = netif_set_real_num_tx_queues(dev, txq); + if (err) + goto undo_rx; + } + if (rxq < dev->real_num_rx_queues) + WARN_ON(netif_set_real_num_rx_queues(dev, rxq)); + if (txq < dev->real_num_tx_queues) + WARN_ON(netif_set_real_num_tx_queues(dev, txq)); + + return 0; +undo_rx: + WARN_ON(netif_set_real_num_rx_queues(dev, old_rxq)); + return err; +} +EXPORT_SYMBOL(netif_set_real_num_queues); + +/** * netif_get_num_default_rss_queues - default number of RSS queues * * This routine should set an upper limit on the number of RSS queues |
