Hi Russell, On Wed, 4 Dec 2024 17:45:43 +0000, "Russell King (Oracle)" <linux@xxxxxxxxxxxxxxx> wrote: > So yes, "des" is being offset, which will upset the unmap operation. > Please try the following patch, thanks: > > diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c > index 9b262cdad60b..c81ea8cdfe6e 100644 > --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c > +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c > @@ -4192,8 +4192,8 @@ static netdev_tx_t stmmac_tso_xmit(struct sk_buff *skb, struct net_device *dev) > struct stmmac_txq_stats *txq_stats; > struct stmmac_tx_queue *tx_q; > u32 pay_len, mss, queue; > + dma_addr_t tso_des, des; > u8 proto_hdr_len, hdr; > - dma_addr_t des; > bool set_ic; > int i; > > @@ -4289,14 +4289,15 @@ static netdev_tx_t stmmac_tso_xmit(struct sk_buff *skb, struct net_device *dev) > > /* If needed take extra descriptors to fill the remaining payload */ > tmp_pay_len = pay_len - TSO_MAX_BUFF_SIZE; > + tso_des = des; > } else { > stmmac_set_desc_addr(priv, first, des); > tmp_pay_len = pay_len; > - des += proto_hdr_len; > + tso_des = des + proto_hdr_len; > pay_len = 0; > } > > - stmmac_tso_allocator(priv, des, tmp_pay_len, (nfrags == 0), queue); > + stmmac_tso_allocator(priv, tso_des, tmp_pay_len, (nfrags == 0), queue); > > /* In case two or more DMA transmit descriptors are allocated for this > * non-paged SKB data, the DMA buffer address should be saved to > Much appreciated for your comments and suggestions, I sent a new patch to fix this issue. Please let me know if you have any new advice. https://lore.kernel.org/netdev/20241205091830.3719609-1-0x1207@xxxxxxxxx/ Thanks, Furong