Skip to content

Commit 2ff7a7d

Browse files
WeiFang-NXPPaolo Abeni
authored andcommitted
net: fec: transmit XDP frames in bulk
Currently, the driver writes the ENET_TDAR register for every XDP frame to trigger transmit start. Frequent MMIO writes consume more CPU cycles and may reduce XDP TX performance, so transmit XDP frames in bulk. Signed-off-by: Wei Fang <wei.fang@nxp.com> Reviewed-by: Frank Li <Frank.Li@nxp.com> Link: https://patch.msgid.link/20260205085742.2685134-9-wei.fang@nxp.com Signed-off-by: Paolo Abeni <pabeni@redhat.com>
1 parent 8a3344b commit 2ff7a7d

1 file changed

Lines changed: 9 additions & 3 deletions

File tree

drivers/net/ethernet/freescale/fec_main.c

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2006,6 +2006,8 @@ static int fec_enet_rx_queue_xdp(struct fec_enet_private *fep, int queue,
20062006
rxq->stats[RX_XDP_TX_ERRORS]++;
20072007
fec_xdp_drop(rxq, &xdp, sync);
20082008
trace_xdp_exception(ndev, prog, XDP_TX);
2009+
} else {
2010+
xdp_res |= FEC_ENET_XDP_TX;
20092011
}
20102012
break;
20112013
default:
@@ -2056,6 +2058,10 @@ static int fec_enet_rx_queue_xdp(struct fec_enet_private *fep, int queue,
20562058
if (xdp_res & FEC_ENET_XDP_REDIR)
20572059
xdp_do_flush();
20582060

2061+
if (xdp_res & FEC_ENET_XDP_TX)
2062+
/* Trigger transmission start */
2063+
fec_txq_trigger_xmit(fep, fep->tx_queue[tx_qid]);
2064+
20592065
return pkt_received;
20602066
}
20612067

@@ -4037,9 +4043,6 @@ static int fec_enet_txq_xmit_frame(struct fec_enet_private *fep,
40374043

40384044
txq->bd.cur = bdp;
40394045

4040-
/* Trigger transmission start */
4041-
fec_txq_trigger_xmit(fep, txq);
4042-
40434046
return 0;
40444047
}
40454048

@@ -4089,6 +4092,9 @@ static int fec_enet_xdp_xmit(struct net_device *dev,
40894092
sent_frames++;
40904093
}
40914094

4095+
if (sent_frames)
4096+
fec_txq_trigger_xmit(fep, txq);
4097+
40924098
__netif_tx_unlock(nq);
40934099

40944100
return sent_frames;

0 commit comments

Comments
 (0)