Revert "net: fec: fix the warning found by dma debug"
Subsystems (3)
PATCH 1/1 Revert "net: fec: fix the warning found by dma debug"
From: Fabio Estevam <[email protected]>
This reverts commit 2b995f63987013bacde99168218f9c7b252bdcf1.
Панов Андрей reported the following regression:
"Commit 2b995f63987013bacde99168218f9c7b252bdcf1 in 4.0.0-rc3 introduces a nasty bug in transmit, corrupting packets.
To reproduce:
$ dd if=/dev/zero of=zeros bs=1M count=20 $ md5sum -b zeros 8f4e33f3dc3e414ff94e5fb6905cba8c *zeros
This checksum is correct.
Copy file "zeros" to another host with NFS, and it gets corrupted, checksum is changed.
File should be big, small amounts of transmit isn't affected.
I use an i.MX6 Quad board.
If this commit is reverted, all works fine."
--- drivers/net/ethernet/freescale/fec_main.c | 34 ++++++++++--------------------- 1 file changed, 11 insertions(+), 23 deletions(-)
drivers/net/ethernet/freescale/fec_main.c +11 -23
@@ -1189,13 +1189,12 @@ static void fec_enet_tx_queue(struct net_device *ndev, u16 queue_id) {struct fec_enet_private *fep; -struct bufdesc *bdp, *bdp_t; +struct bufdesc *bdp;unsigned short status;struct sk_buff *skb;struct fec_enet_priv_tx_q *txq;struct netdev_queue *nq;int index =0 ; -int i, bdnum;int entries_free; fep =netdev_priv (ndev);
@@ -1216,29 +1215,18 @@ fec_enet_tx_queue(struct net_device *ndev, u16 queue_id)if (bdp == txq->cur_tx)break ; - bdp_t = bdp; - bdnum =1 ; - index =fec_enet_get_bd_index (txq->tx_bd_base, bdp_t, fep); - skb = txq->tx_skbuff[index]; -while (!skb) { - bdp_t =fec_enet_get_nextdesc (bdp_t, fep, queue_id); - index =fec_enet_get_bd_index (txq->tx_bd_base, bdp_t, fep); - skb = txq->tx_skbuff[index]; - bdnum++; - } -if (skb_shinfo (skb)->nr_frags && - (status = bdp_t->cbd_sc) &BD_ENET_TX_READY ) -break ; + index =fec_enet_get_bd_index (txq->tx_bd_base, bdp, fep); -for (i =0 ; i < bdnum; i++) { -if (!IS_TSO_HEADER (txq, bdp->cbd_bufaddr)) -dma_unmap_single (&fep->pdev->dev, bdp->cbd_bufaddr, - bdp->cbd_datlen,DMA_TO_DEVICE ); - bdp->cbd_bufaddr =0 ; -if (i < bdnum -1 ) - bdp =fec_enet_get_nextdesc (bdp, fep, queue_id); - } + skb = txq->tx_skbuff[index]; txq->tx_skbuff[index] =NULL ; +if (!IS_TSO_HEADER (txq, bdp->cbd_bufaddr)) +dma_unmap_single (&fep->pdev->dev, bdp->cbd_bufaddr, + bdp->cbd_datlen,DMA_TO_DEVICE ); + bdp->cbd_bufaddr =0 ; +if (!skb) { + bdp =fec_enet_get_nextdesc (bdp, fep, queue_id); +continue ; + }/* Check for errors. */ if (status & (BD_ENET_TX_HB | BD_ENET_TX_LC |
Signature · 1 line
1.9.1
From: Fabio Estevam <[email protected]>
Date: Fri, 13 Mar 2015 14:07:54 -0300
Quoted 21 lines
From: Fabio Estevam <[email protected]>
This reverts commit
2b995f63987013bacde99168218f9c7b252bdcf1.Панов Андрей reported the following regression:
"Commit
2b995f63987013bacde99168218f9c7b252bdcf1in 4.0.0-rc3 introduces a nasty bug in transmit, corrupting packets.To reproduce:
$ dd if=/dev/zero of=zeros bs=1M count=20 $ md5sum -b zeros 8f4e33f3dc3e414ff94e5fb6905cba8c *zerosThis checksum is correct.
Copy file "zeros" to another host with NFS, and it gets corrupted, checksum is changed.
File should be big, small amounts of transmit isn't affected.
Quoted 6 lines
I use an i.MX6 Quad board.
If this commit is reverted, all works fine."
Reported-by Панов Андрей <[email protected]>Signed-off-by Fabio Estevam <[email protected]>
Applied, thanks.