Otherwise it just leaks.

Signed-off-by: Denis Orlov <[email protected]>
---
 drivers/net/rtl8169.c | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/drivers/net/rtl8169.c b/drivers/net/rtl8169.c
index 4b40c539dd..e923e179bf 100644
--- a/drivers/net/rtl8169.c
+++ b/drivers/net/rtl8169.c
@@ -478,6 +478,18 @@ static void rtl8169_eth_halt(struct eth_device *edev)
        RTL_W32(priv, RxMissed, 0);
 
        pci_clear_master(priv->pci_dev);
+
+       dma_unmap_single(&edev->dev, priv->tx_buf_phys, NUM_TX_DESC * 
PKT_BUF_SIZE,
+                        DMA_TO_DEVICE);
+       free(priv->tx_buf);
+       dma_free_coherent((void *)priv->tx_desc, priv->tx_desc_phys,
+                         NUM_TX_DESC * sizeof(struct bufdesc));
+
+       dma_unmap_single(&edev->dev, priv->rx_buf_phys, NUM_RX_DESC * 
PKT_BUF_SIZE,
+                        DMA_FROM_DEVICE);
+       free(priv->rx_buf);
+       dma_free_coherent((void *)priv->rx_desc, priv->rx_desc_phys,
+                         NUM_RX_DESC * sizeof(struct bufdesc));
 }
 
 static int rtl8169_probe(struct pci_dev *pdev, const struct pci_device_id *id)
-- 
2.20.1


Reply via email to