Re: Commit 05cf0d1bf4 ("net: stmmac: free an skb first when there are no longer any descriptors using it") breaks stmmac?
From: Jose Abreu <Jose.Abreu@synopsys.com>
Date: 2017-11-30 16:51:05
Hi Niklas, Thanks for the detailed explanation! On 30-11-2017 03:51, Niklas Cassel wrote:
quoted hunk ↗ jump to hunk
Could you try to see if the following patch solves your problem: (still don't see why it should be needed, considering stmmac_tx_clean() should set all non-NULL entries to NULL)diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c index 1763e48c84e2..1d30b20b3740 100644 --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c@@ -2830,6 +2830,7 @@ static netdev_tx_t stmmac_tso_xmit(struct sk_buff *skb, struct net_device *dev) tx_q->tx_skbuff_dma[first_entry].buf = des; tx_q->tx_skbuff_dma[first_entry].len = skb_headlen(skb); + tx_q->tx_skbuff[first_entry] = NULL; first->des0 = cpu_to_le32(des);@@ -3003,6 +3004,8 @@ static netdev_tx_t stmmac_xmit(struct sk_buff *skb, struct net_device *dev) first = desc; + tx_q->tx_skbuff[first_entry] = NULL; + enh_desc = priv->plat->enh_desc; /* To program the descriptors according to the size of the frame */ if (enh_desc)
I confirm that applying 05cf0d1bf4 ("net: stmmac: free an skb
first when there are no longer any descriptors using it") and
this patch makes my setup work perfectly in multi-queue
configuration. Can you send an official patch to -net?
You can add my:
Tested-by: Jose Abreu <redacted>
Also, maybe we should try to understand why stmmac_tx_clean() is
not setting the entry to NULL?
Thanks and Best Regards,
Jose Miguel Abreu