[PATCH net-next 4/4] net: spacemit: Free rings of memory after unmapping DMA

Vivian Wang wangruikang at iscas.ac.cn
Tue Mar 3 01:24:21 PST 2026


In emac_free_{tx,rx}_resources, call dma_free_coherent() to unmap DMA
before calling kfree() to deallocate the memory, instead of the other
way around.

Fixes: bfec6d7f2001 ("net: spacemit: Add K1 Ethernet MAC")
Signed-off-by: Vivian Wang <wangruikang at iscas.ac.cn>
---
 drivers/net/ethernet/spacemit/k1_emac.c | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/drivers/net/ethernet/spacemit/k1_emac.c b/drivers/net/ethernet/spacemit/k1_emac.c
index f7f16397a2c2..02a009afc921 100644
--- a/drivers/net/ethernet/spacemit/k1_emac.c
+++ b/drivers/net/ethernet/spacemit/k1_emac.c
@@ -446,12 +446,12 @@ static void emac_free_tx_resources(struct emac_priv *priv)
 
 	emac_clean_tx_desc_ring(priv);
 
-	kfree(tr->tx_desc_buf);
-	tr->tx_desc_buf = NULL;
-
 	dma_free_coherent(dev, tr->total_size, tr->desc_addr,
 			  tr->desc_dma_addr);
 	tr->desc_addr = NULL;
+
+	kfree(tr->tx_desc_buf);
+	tr->tx_desc_buf = NULL;
 }
 
 static void emac_free_rx_resources(struct emac_priv *priv)
@@ -461,12 +461,12 @@ static void emac_free_rx_resources(struct emac_priv *priv)
 
 	emac_clean_rx_desc_ring(priv);
 
-	kfree(rr->rx_desc_buf);
-	rr->rx_desc_buf = NULL;
-
 	dma_free_coherent(dev, rr->total_size, rr->desc_addr,
 			  rr->desc_dma_addr);
 	rr->desc_addr = NULL;
+
+	kfree(rr->rx_desc_buf);
+	rr->rx_desc_buf = NULL;
 }
 
 static int emac_tx_clean_desc(struct emac_priv *priv)

-- 
2.53.0




More information about the linux-riscv mailing list