]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
net: spacemit: Fix error handling in emac_alloc_rx_desc_buffers()
authorVivian Wang <wangruikang@iscas.ac.cn>
Thu, 5 Mar 2026 06:39:38 +0000 (14:39 +0800)
committerJakub Kicinski <kuba@kernel.org>
Sat, 7 Mar 2026 02:58:34 +0000 (18:58 -0800)
Even if we get a dma_mapping_error() while mapping an RX buffer, we
should still update rx_ring->head to ensure that the buffers we were
able to allocate and map are used. Fix this by breaking out to the
existing code after the loop, analogous to the existing handling for skb
allocation failure.

Fixes: bfec6d7f2001 ("net: spacemit: Add K1 Ethernet MAC")
Signed-off-by: Vivian Wang <wangruikang@iscas.ac.cn>
Link: https://patch.msgid.link/20260305-k1-ethernet-more-fixes-v2-1-e4e434d65055@iscas.ac.cn
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/spacemit/k1_emac.c

index 338a2637b1da96da738a7ac2daded10e1749baf8..5a5cb61be08ca8e748f9cbe240f21f07d3d52530 100644 (file)
@@ -565,7 +565,9 @@ static void emac_alloc_rx_desc_buffers(struct emac_priv *priv)
                                                  DMA_FROM_DEVICE);
                if (dma_mapping_error(&priv->pdev->dev, rx_buf->dma_addr)) {
                        dev_err_ratelimited(&ndev->dev, "Mapping skb failed\n");
-                       goto err_free_skb;
+                       dev_kfree_skb_any(skb);
+                       rx_buf->skb = NULL;
+                       break;
                }
 
                rx_desc_addr = &((struct emac_desc *)rx_ring->desc_addr)[i];
@@ -590,10 +592,6 @@ static void emac_alloc_rx_desc_buffers(struct emac_priv *priv)
 
        rx_ring->head = i;
        return;
-
-err_free_skb:
-       dev_kfree_skb_any(skb);
-       rx_buf->skb = NULL;
 }
 
 /* Returns number of packets received */