[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20241205173431.0000779e@gmail.com>
Date: Thu, 5 Dec 2024 17:34:31 +0800
From: Furong Xu <0x1207@...il.com>
To: "Russell King (Oracle)" <linux@...linux.org.uk>
Cc: Jon Hunter <jonathanh@...dia.com>, Thierry Reding
<thierry.reding@...il.com>, Robin Murphy <robin.murphy@....com>, Jakub
Kicinski <kuba@...nel.org>, netdev@...r.kernel.org,
linux-stm32@...md-mailman.stormreply.com,
linux-arm-kernel@...ts.infradead.org, linux-kernel@...r.kernel.org,
Alexandre Torgue <alexandre.torgue@...s.st.com>, Jose Abreu
<joabreu@...opsys.com>, "David S. Miller" <davem@...emloft.net>, Eric
Dumazet <edumazet@...gle.com>, Paolo Abeni <pabeni@...hat.com>, Maxime
Coquelin <mcoquelin.stm32@...il.com>, xfr@...look.com, Suraj Jaiswal
<quic_jsuraj@...cinc.com>, Thierry Reding <treding@...dia.com>,
"linux-tegra@...r.kernel.org" <linux-tegra@...r.kernel.org>, Will Deacon
<will@...nel.org>
Subject: Re: [PATCH net v1] net: stmmac: TSO: Fix unbalanced DMA map/unmap
for non-paged SKB data
Hi Russell,
On Wed, 4 Dec 2024 17:45:43 +0000, "Russell King (Oracle)" <linux@...linux.org.uk> 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@gmail.com/
Thanks,
Furong
Powered by blists - more mailing lists