mirror of
https://github.com/torvalds/linux.git
synced 2024-12-19 01:23:20 +00:00
Revert "net: fec: fix the warning found by dma debug"
This reverts commit2b995f6398
. Панов Андрей reported the following regression: "Commit2b995f6398
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." Reported-by: Панов Андрей <rockford@yandex.ru> Signed-off-by: Fabio Estevam <fabio.estevam@freescale.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
40fb70f3aa
commit
a2fe37b69d
@ -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 |
|
||||
|
Loading…
Reference in New Issue
Block a user