Skip to content

Commit 8730379

Browse files
committed
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 <[email protected]>
2 parents 8679c31 + e874f45 commit 8730379

File tree

3 files changed

+49
-8
lines changed

3 files changed

+49
-8
lines changed

drivers/net/ethernet/netronome/nfp/nfp_net_common.c

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3281,17 +3281,12 @@ static int nfp_net_dp_swap_enable(struct nfp_net *nn, struct nfp_net_dp *dp)
32813281
for (r = 0; r < nn->max_r_vecs; r++)
32823282
nfp_net_vector_assign_rings(&nn->dp, &nn->r_vecs[r], r);
32833283

3284-
err = netif_set_real_num_rx_queues(nn->dp.netdev, nn->dp.num_rx_rings);
3284+
err = netif_set_real_num_queues(nn->dp.netdev,
3285+
nn->dp.num_stack_tx_rings,
3286+
nn->dp.num_rx_rings);
32853287
if (err)
32863288
return err;
32873289

3288-
if (nn->dp.netdev->real_num_tx_queues != nn->dp.num_stack_tx_rings) {
3289-
err = netif_set_real_num_tx_queues(nn->dp.netdev,
3290-
nn->dp.num_stack_tx_rings);
3291-
if (err)
3292-
return err;
3293-
}
3294-
32953290
return nfp_net_set_config_and_enable(nn);
32963291
}
32973292

include/linux/netdevice.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3916,6 +3916,8 @@ static inline int netif_set_real_num_rx_queues(struct net_device *dev,
39163916
return 0;
39173917
}
39183918
#endif
3919+
int netif_set_real_num_queues(struct net_device *dev,
3920+
unsigned int txq, unsigned int rxq);
39193921

39203922
static inline struct netdev_rx_queue *
39213923
__netif_get_rx_queue(struct net_device *dev, unsigned int rxq)

net/core/dev.c

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2973,6 +2973,50 @@ int netif_set_real_num_rx_queues(struct net_device *dev, unsigned int rxq)
29732973
EXPORT_SYMBOL(netif_set_real_num_rx_queues);
29742974
#endif
29752975

2976+
/**
2977+
* netif_set_real_num_queues - set actual number of RX and TX queues used
2978+
* @dev: Network device
2979+
* @txq: Actual number of TX queues
2980+
* @rxq: Actual number of RX queues
2981+
*
2982+
* Set the real number of both TX and RX queues.
2983+
* Does nothing if the number of queues is already correct.
2984+
*/
2985+
int netif_set_real_num_queues(struct net_device *dev,
2986+
unsigned int txq, unsigned int rxq)
2987+
{
2988+
unsigned int old_rxq = dev->real_num_rx_queues;
2989+
int err;
2990+
2991+
if (txq < 1 || txq > dev->num_tx_queues ||
2992+
rxq < 1 || rxq > dev->num_rx_queues)
2993+
return -EINVAL;
2994+
2995+
/* Start from increases, so the error path only does decreases -
2996+
* decreases can't fail.
2997+
*/
2998+
if (rxq > dev->real_num_rx_queues) {
2999+
err = netif_set_real_num_rx_queues(dev, rxq);
3000+
if (err)
3001+
return err;
3002+
}
3003+
if (txq > dev->real_num_tx_queues) {
3004+
err = netif_set_real_num_tx_queues(dev, txq);
3005+
if (err)
3006+
goto undo_rx;
3007+
}
3008+
if (rxq < dev->real_num_rx_queues)
3009+
WARN_ON(netif_set_real_num_rx_queues(dev, rxq));
3010+
if (txq < dev->real_num_tx_queues)
3011+
WARN_ON(netif_set_real_num_tx_queues(dev, txq));
3012+
3013+
return 0;
3014+
undo_rx:
3015+
WARN_ON(netif_set_real_num_rx_queues(dev, old_rxq));
3016+
return err;
3017+
}
3018+
EXPORT_SYMBOL(netif_set_real_num_queues);
3019+
29763020
/**
29773021
* netif_get_num_default_rss_queues - default number of RSS queues
29783022
*

0 commit comments

Comments
 (0)