blob: 0976252673facb7009d07bb38fe2be2e3cf6d481 [file] [log] [blame]
b.liue9582032025-04-17 19:18:16 +08001From 3d0b72654b0c8304424503e7560ee8635dd56340 Mon Sep 17 00:00:00 2001
2From: Sieng Piaw Liew <liew.s.piaw@gmail.com>
3Date: Wed, 6 Jan 2021 22:42:06 +0800
4Subject: [PATCH 5/7] bcm63xx_enet: consolidate rx SKB ring cleanup code
5
6The rx SKB ring use the same code for cleanup at various points.
7Combine them into a function to reduce lines of code.
8
9Signed-off-by: Sieng Piaw Liew <liew.s.piaw@gmail.com>
10Acked-by: Florian Fainelli <f.fainelli@gmail.com>
11Signed-off-by: Jakub Kicinski <kuba@kernel.org>
12---
13 drivers/net/ethernet/broadcom/bcm63xx_enet.c | 72 ++++++--------------
14 1 file changed, 22 insertions(+), 50 deletions(-)
15
16--- a/drivers/net/ethernet/broadcom/bcm63xx_enet.c
17+++ b/drivers/net/ethernet/broadcom/bcm63xx_enet.c
18@@ -861,6 +861,24 @@ static void bcm_enet_adjust_link(struct
19 priv->pause_tx ? "tx" : "off");
20 }
21
22+static void bcm_enet_free_rx_skb_ring(struct device *kdev, struct bcm_enet_priv *priv)
23+{
24+ int i;
25+
26+ for (i = 0; i < priv->rx_ring_size; i++) {
27+ struct bcm_enet_desc *desc;
28+
29+ if (!priv->rx_skb[i])
30+ continue;
31+
32+ desc = &priv->rx_desc_cpu[i];
33+ dma_unmap_single(kdev, desc->address, priv->rx_skb_size,
34+ DMA_FROM_DEVICE);
35+ kfree_skb(priv->rx_skb[i]);
36+ }
37+ kfree(priv->rx_skb);
38+}
39+
40 /*
41 * open callback, allocate dma rings & buffers and start rx operation
42 */
43@@ -1085,18 +1103,7 @@ static int bcm_enet_open(struct net_devi
44 return 0;
45
46 out:
47- for (i = 0; i < priv->rx_ring_size; i++) {
48- struct bcm_enet_desc *desc;
49-
50- if (!priv->rx_skb[i])
51- continue;
52-
53- desc = &priv->rx_desc_cpu[i];
54- dma_unmap_single(kdev, desc->address, priv->rx_skb_size,
55- DMA_FROM_DEVICE);
56- kfree_skb(priv->rx_skb[i]);
57- }
58- kfree(priv->rx_skb);
59+ bcm_enet_free_rx_skb_ring(kdev, priv);
60
61 out_free_tx_skb:
62 kfree(priv->tx_skb);
63@@ -1175,7 +1182,6 @@ static int bcm_enet_stop(struct net_devi
64 {
65 struct bcm_enet_priv *priv;
66 struct device *kdev;
67- int i;
68
69 priv = netdev_priv(dev);
70 kdev = &priv->pdev->dev;
71@@ -1204,20 +1210,9 @@ static int bcm_enet_stop(struct net_devi
72 bcm_enet_tx_reclaim(dev, 1);
73
74 /* free the rx skb ring */
75- for (i = 0; i < priv->rx_ring_size; i++) {
76- struct bcm_enet_desc *desc;
77-
78- if (!priv->rx_skb[i])
79- continue;
80-
81- desc = &priv->rx_desc_cpu[i];
82- dma_unmap_single(kdev, desc->address, priv->rx_skb_size,
83- DMA_FROM_DEVICE);
84- kfree_skb(priv->rx_skb[i]);
85- }
86+ bcm_enet_free_rx_skb_ring(kdev, priv);
87
88 /* free remaining allocated memory */
89- kfree(priv->rx_skb);
90 kfree(priv->tx_skb);
91 dma_free_coherent(kdev, priv->rx_desc_alloc_size,
92 priv->rx_desc_cpu, priv->rx_desc_dma);
93@@ -2308,18 +2303,7 @@ static int bcm_enetsw_open(struct net_de
94 return 0;
95
96 out:
97- for (i = 0; i < priv->rx_ring_size; i++) {
98- struct bcm_enet_desc *desc;
99-
100- if (!priv->rx_skb[i])
101- continue;
102-
103- desc = &priv->rx_desc_cpu[i];
104- dma_unmap_single(kdev, desc->address, priv->rx_skb_size,
105- DMA_FROM_DEVICE);
106- kfree_skb(priv->rx_skb[i]);
107- }
108- kfree(priv->rx_skb);
109+ bcm_enet_free_rx_skb_ring(kdev, priv);
110
111 out_free_tx_skb:
112 kfree(priv->tx_skb);
113@@ -2348,7 +2332,6 @@ static int bcm_enetsw_stop(struct net_de
114 {
115 struct bcm_enet_priv *priv;
116 struct device *kdev;
117- int i;
118
119 priv = netdev_priv(dev);
120 kdev = &priv->pdev->dev;
121@@ -2371,20 +2354,9 @@ static int bcm_enetsw_stop(struct net_de
122 bcm_enet_tx_reclaim(dev, 1);
123
124 /* free the rx skb ring */
125- for (i = 0; i < priv->rx_ring_size; i++) {
126- struct bcm_enet_desc *desc;
127-
128- if (!priv->rx_skb[i])
129- continue;
130-
131- desc = &priv->rx_desc_cpu[i];
132- dma_unmap_single(kdev, desc->address, priv->rx_skb_size,
133- DMA_FROM_DEVICE);
134- kfree_skb(priv->rx_skb[i]);
135- }
136+ bcm_enet_free_rx_skb_ring(kdev, priv);
137
138 /* free remaining allocated memory */
139- kfree(priv->rx_skb);
140 kfree(priv->tx_skb);
141 dma_free_coherent(kdev, priv->rx_desc_alloc_size,
142 priv->rx_desc_cpu, priv->rx_desc_dma);