stmmac enables TX checksum insertion for XDP frames whenever the queue supports it. XDP frames carry no TX checksum offload request, so this can overwrite a checksum already present in the packet. Pass false to stmmac_prepare_tx_desc() when transmitting an XDP frame so that the packet is sent with its checksum fields unchanged. Fixes: be8b38a722e6 ("net: stmmac: Add support for XDP_TX action") Fixes: 8b278a5b69a2 ("net: stmmac: Add support for XDP_REDIRECT action") Signed-off-by: Jisheng Zhang --- drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c index 24656b35350b..8fe75b00974f 100644 --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c @@ -5184,7 +5184,6 @@ static int stmmac_xdp_xmit_xdpf(struct stmmac_priv *priv, int queue, { struct stmmac_txq_stats *txq_stats = &priv->xstats.txq_stats[queue]; struct stmmac_tx_queue *tx_q = &priv->dma_conf.tx_queue[queue]; - bool csum = !priv->plat->tx_queues_cfg[queue].coe_unsupported; unsigned int entry = tx_q->cur_tx; enum stmmac_txbuf_type buf_type; struct dma_desc *tx_desc; @@ -5229,7 +5228,7 @@ static int stmmac_xdp_xmit_xdpf(struct stmmac_priv *priv, int queue, stmmac_set_desc_addr(priv, tx_desc, dma_addr); stmmac_prepare_tx_desc(priv, tx_desc, 1, xdpf->len, - csum, priv->descriptor_mode, true, true, + false, priv->descriptor_mode, true, true, xdpf->len); tx_q->tx_count_frames++; -- 2.53.0