Skip to content

Commit 8a3344b

Browse files
WeiFang-NXPPaolo Abeni
authored andcommitted
net: fec: add tx_qid parameter to fec_enet_xdp_tx_xmit()
Remove fec_enet_xdp_get_tx_queue() from fec_enet_xdp_tx_xmit() and add the tx_qid parameter to it. Then, calculate the TX queue ID for XDP_TX frames in fec_enet_rx_queue_xdp(). This way, the TX queue ID only needs to be calculated once for XDP_TX frames during each NAPI polling. And since the number of RX queues and TX queues in FEC is generally equal, the RX queue ID can be directly used as the TX queue ID. In exceptional cases, fec_enet_xdp_get_tx_queue() is used to calculate the TX queue ID. Signed-off-by: Wei Fang <wei.fang@nxp.com> Link: https://patch.msgid.link/20260205085742.2685134-8-wei.fang@nxp.com Signed-off-by: Paolo Abeni <pabeni@redhat.com>
1 parent 5ff3d3d commit 8a3344b

1 file changed

Lines changed: 19 additions & 19 deletions

File tree

drivers/net/ethernet/freescale/fec_main.c

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ static void set_multicast_list(struct net_device *ndev);
7979
static void fec_enet_itr_coal_set(struct net_device *ndev);
8080
static int fec_enet_xdp_tx_xmit(struct fec_enet_private *fep,
8181
int cpu, struct xdp_buff *xdp,
82-
u32 dma_sync_len);
82+
u32 dma_sync_len, int queue);
8383

8484
#define DRIVER_NAME "fec"
8585

@@ -1890,6 +1890,15 @@ static void fec_xdp_drop(struct fec_enet_priv_rx_q *rxq,
18901890
page_pool_put_page(rxq->page_pool, page, sync, true);
18911891
}
18921892

1893+
static int
1894+
fec_enet_xdp_get_tx_queue(struct fec_enet_private *fep, int index)
1895+
{
1896+
if (unlikely(index < 0))
1897+
return 0;
1898+
1899+
return (index % fep->num_tx_queues);
1900+
}
1901+
18931902
static int fec_enet_rx_queue_xdp(struct fec_enet_private *fep, int queue,
18941903
int budget, struct bpf_prog *prog)
18951904
{
@@ -1903,6 +1912,7 @@ static int fec_enet_rx_queue_xdp(struct fec_enet_private *fep, int queue,
19031912
struct sk_buff *skb;
19041913
u16 status, pkt_len;
19051914
struct xdp_buff xdp;
1915+
int tx_qid = queue;
19061916
struct page *page;
19071917
u32 xdp_res = 0;
19081918
dma_addr_t dma;
@@ -1917,6 +1927,9 @@ static int fec_enet_rx_queue_xdp(struct fec_enet_private *fep, int queue,
19171927
flush_cache_all();
19181928
#endif
19191929

1930+
if (unlikely(tx_qid >= fep->num_tx_queues))
1931+
tx_qid = fec_enet_xdp_get_tx_queue(fep, cpu);
1932+
19201933
xdp_init_buff(&xdp, PAGE_SIZE << fep->pagepool_order, &rxq->xdp_rxq);
19211934

19221935
while (!((status = fec16_to_cpu(bdp->cbd_sc)) & BD_ENET_RX_EMPTY)) {
@@ -1988,7 +2001,7 @@ static int fec_enet_rx_queue_xdp(struct fec_enet_private *fep, int queue,
19882001
break;
19892002
case XDP_TX:
19902003
rxq->stats[RX_XDP_TX]++;
1991-
err = fec_enet_xdp_tx_xmit(fep, cpu, &xdp, sync);
2004+
err = fec_enet_xdp_tx_xmit(fep, cpu, &xdp, sync, tx_qid);
19922005
if (unlikely(err)) {
19932006
rxq->stats[RX_XDP_TX_ERRORS]++;
19942007
fec_xdp_drop(rxq, &xdp, sync);
@@ -3939,15 +3952,6 @@ static int fec_enet_bpf(struct net_device *dev, struct netdev_bpf *bpf)
39393952
}
39403953
}
39413954

3942-
static int
3943-
fec_enet_xdp_get_tx_queue(struct fec_enet_private *fep, int index)
3944-
{
3945-
if (unlikely(index < 0))
3946-
return 0;
3947-
3948-
return (index % fep->num_tx_queues);
3949-
}
3950-
39513955
static int fec_enet_txq_xmit_frame(struct fec_enet_private *fep,
39523956
struct fec_enet_priv_tx_q *txq,
39533957
void *frame, u32 dma_sync_len,
@@ -4041,15 +4045,11 @@ static int fec_enet_txq_xmit_frame(struct fec_enet_private *fep,
40414045

40424046
static int fec_enet_xdp_tx_xmit(struct fec_enet_private *fep,
40434047
int cpu, struct xdp_buff *xdp,
4044-
u32 dma_sync_len)
4048+
u32 dma_sync_len, int queue)
40454049
{
4046-
struct fec_enet_priv_tx_q *txq;
4047-
struct netdev_queue *nq;
4048-
int queue, ret;
4049-
4050-
queue = fec_enet_xdp_get_tx_queue(fep, cpu);
4051-
txq = fep->tx_queue[queue];
4052-
nq = netdev_get_tx_queue(fep->netdev, queue);
4050+
struct netdev_queue *nq = netdev_get_tx_queue(fep->netdev, queue);
4051+
struct fec_enet_priv_tx_q *txq = fep->tx_queue[queue];
4052+
int ret;
40534053

40544054
__netif_tx_lock(nq, cpu);
40554055

0 commit comments

Comments
 (0)