[PATCH 6/6] net: fsl-fman: do not leave not transmitted DMA buffers mapped

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



When a packet can't be transmitted we should unmap it. This probably
won't change much since when we can't transmit a packet the fman
probably can't recover from it anyway, but still it is cleaner to not
leave the buffers mapped.

Signed-off-by: Sascha Hauer <s.hauer@xxxxxxxxxxxxxx>
---
 drivers/net/fsl-fman.c | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/drivers/net/fsl-fman.c b/drivers/net/fsl-fman.c
index 01f7064fd2..467f7840bf 100644
--- a/drivers/net/fsl-fman.c
+++ b/drivers/net/fsl-fman.c
@@ -835,7 +835,7 @@ static int fm_eth_send(struct eth_device *edev, void *buf, int len)
 	struct fm_eth *fm_eth = to_fm_eth(edev);
 	struct fm_port_global_pram *pram;
 	struct fm_port_bd *txbd;
-	int i;
+	int i, ret;
 	dma_addr_t dma;
 
 	pram = fm_eth->tx_pram;
@@ -869,18 +869,20 @@ static int fm_eth_send(struct eth_device *edev, void *buf, int len)
 		     fm_eth->cur_txbd_idx * sizeof(struct fm_port_bd));
 
 	/* wait for buffer to be transmitted */
+	ret = 0;
 	for (i = 0; muram_readw(&txbd->status) & TxBD_READY; i++) {
 		udelay(10);
 		if (i > 0x10000) {
 			dev_err(&edev->dev, "Tx error, txbd->status = 0x%x\n",
 			       muram_readw(&txbd->status));
-			return -EIO;
+			ret = -EIO;
+			break;
 		}
 	}
 
 	dma_unmap_single(fm_eth->dev, dma, len, DMA_TO_DEVICE);
 
-	return 0;
+	return ret;
 }
 
 static int fm_eth_recv(struct eth_device *edev)
-- 
2.24.0


_______________________________________________
barebox mailing list
barebox@xxxxxxxxxxxxxxxxxxx
http://lists.infradead.org/mailman/listinfo/barebox



[Index of Archives]     [Linux Embedded]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux