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

From: Vivian Wang

Date: Tue Mar 03 2026 - 04:27:43 EST


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@xxxxxxxxxxx>
---
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