[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20220510084443.14473-5-ihuguet@redhat.com>
Date: Tue, 10 May 2022 10:44:42 +0200
From: Íñigo Huguet <ihuguet@...hat.com>
To: ecree.xilinx@...il.com, habetsm.xilinx@...il.com,
ap420073@...il.com
Cc: davem@...emloft.net, edumazet@...gle.com, kuba@...nel.org,
pabeni@...hat.com, netdev@...r.kernel.org,
Íñigo Huguet <ihuguet@...hat.com>
Subject: [PATCH net-next 4/5] sfc: refactor efx_set_xdp_tx_queues
Refactor this code to make easier to follow what's going on there and to
show the intent of the code more clearly.
No functional changes.
Signed-off-by: Íñigo Huguet <ihuguet@...hat.com>
---
drivers/net/ethernet/sfc/efx_channels.c | 65 ++++++++++---------------
1 file changed, 27 insertions(+), 38 deletions(-)
diff --git a/drivers/net/ethernet/sfc/efx_channels.c b/drivers/net/ethernet/sfc/efx_channels.c
index 1c05063a7215..f6634faa1ec4 100644
--- a/drivers/net/ethernet/sfc/efx_channels.c
+++ b/drivers/net/ethernet/sfc/efx_channels.c
@@ -781,17 +781,18 @@ static inline int efx_alloc_xdp_tx_queues(struct efx_nic *efx)
}
/* Assign a tx queue to one CPU for XDP_TX action */
-static int efx_set_xdp_tx_queue(struct efx_nic *efx, int xdp_queue_number,
- struct efx_tx_queue *tx_queue)
+static inline int efx_set_xdp_tx_queue(struct efx_nic *efx, int cpu,
+ struct efx_tx_queue *tx_queue)
{
- if (xdp_queue_number >= efx->xdp_tx_queue_count)
+ if (cpu >= efx->xdp_tx_queue_count)
return -EINVAL;
netif_dbg(efx, drv, efx->net_dev,
"Channel %u TXQ %u is XDP %u, HW %u\n",
tx_queue->channel->channel, tx_queue->label,
- xdp_queue_number, tx_queue->queue);
- efx->xdp_tx_queues[xdp_queue_number] = tx_queue;
+ cpu, tx_queue->queue);
+
+ efx->xdp_tx_queues[cpu] = tx_queue;
return 0;
}
@@ -803,49 +804,37 @@ static void efx_set_xdp_tx_queues(struct efx_nic *efx)
{
struct efx_tx_queue *tx_queue;
struct efx_channel *channel;
- unsigned int next_queue = 0;
- int xdp_queue_number = 0;
- int rc;
-
- efx_for_each_channel(channel, efx) {
- if (channel->channel < efx->tx_channel_offset)
- continue;
-
- if (efx_channel_is_xdp_tx(channel)) {
+ unsigned int queue_num, cpu;
+
+ cpu = 0;
+ if (efx->xdp_txq_queues_mode == EFX_XDP_TX_QUEUES_BORROWED) {
+ efx_for_each_tx_channel(channel, efx) {
+ /* borrow first channel's queue, with no csum offload */
+ if (efx_set_xdp_tx_queue(efx, cpu, &channel->tx_queue[0]) == 0)
+ cpu++;
+ }
+ } else {
+ efx_for_each_xdp_channel(channel, efx) {
efx_for_each_channel_tx_queue(tx_queue, channel) {
- rc = efx_set_xdp_tx_queue(efx, xdp_queue_number,
- tx_queue);
- if (rc == 0)
- xdp_queue_number++;
+ if (efx_set_xdp_tx_queue(efx, cpu, tx_queue) == 0)
+ cpu++;
}
- } else if (efx->xdp_txq_queues_mode == EFX_XDP_TX_QUEUES_BORROWED) {
-
- /* If XDP is borrowing queues from net stack, it must
- * use the queue with no csum offload, which is the
- * first one of the channel
- * (note: tx_queue_by_type is not initialized yet)
- */
- tx_queue = &channel->tx_queue[0];
- rc = efx_set_xdp_tx_queue(efx, xdp_queue_number,
- tx_queue);
- if (rc == 0)
- xdp_queue_number++;
}
}
+
WARN_ON(efx->xdp_txq_queues_mode == EFX_XDP_TX_QUEUES_DEDICATED &&
- xdp_queue_number != efx->xdp_tx_queue_count);
+ cpu != efx->xdp_tx_queue_count);
WARN_ON(efx->xdp_txq_queues_mode != EFX_XDP_TX_QUEUES_DEDICATED &&
- xdp_queue_number > efx->xdp_tx_queue_count);
+ cpu > efx->xdp_tx_queue_count);
/* If we have more CPUs than assigned XDP TX queues, assign the already
* existing queues to the exceeding CPUs
*/
- next_queue = 0;
- while (xdp_queue_number < efx->xdp_tx_queue_count) {
- tx_queue = efx->xdp_tx_queues[next_queue++];
- rc = efx_set_xdp_tx_queue(efx, xdp_queue_number, tx_queue);
- if (rc == 0)
- xdp_queue_number++;
+ queue_num = 0;
+ while (cpu < efx->xdp_tx_queue_count) {
+ tx_queue = efx->xdp_tx_queues[queue_num++];
+ if (efx_set_xdp_tx_queue(efx, cpu, tx_queue) == 0)
+ cpu++;
}
}
--
2.34.1
Powered by blists - more mailing lists