Johnny Hughes
2019-02-04 c1f36c28393a7bb126cbf436cd6a4077a5b5c313
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
From 0691379d3ed50fa89cf16d9b443553a4eb7c9d79 Mon Sep 17 00:00:00 2001
From: Antoine Tenart <antoine.tenart@free-electrons.com>
Date: Tue, 28 Nov 2017 14:19:49 +0100
Subject: [PATCH 11/46] net: mvpp2: cleanup probed ports in the probe error
 path
 
This patches fixes the probe error path by cleaning up probed ports, to
avoid leaving registered net devices when the driver failed to probe.
 
Fixes: 3f518509dedc ("ethernet: Add new driver for Marvell Armada 375 network unit")
Signed-off-by: Antoine Tenart <antoine.tenart@free-electrons.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
(cherry picked from commit 26146b0e6b6869c6cd8a45ab3a4a5562e7a91b23)
Signed-off-by: Marcin Wojtas <mw@semihalf.com>
---
 drivers/net/ethernet/marvell/mvpp2.c | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)
 
diff --git a/drivers/net/ethernet/marvell/mvpp2.c b/drivers/net/ethernet/marvell/mvpp2.c
index 79f01cd..afae4fe 100644
--- a/drivers/net/ethernet/marvell/mvpp2.c
+++ b/drivers/net/ethernet/marvell/mvpp2.c
@@ -8329,7 +8329,7 @@ static int mvpp2_probe(struct platform_device *pdev)
     for_each_available_child_of_node(dn, port_node) {
         err = mvpp2_port_probe(pdev, port_node, priv, i);
         if (err < 0)
-            goto err_mg_clk;
+            goto err_port_probe;
         i++;
     }
 
@@ -8345,12 +8345,19 @@ static int mvpp2_probe(struct platform_device *pdev)
     priv->stats_queue = create_singlethread_workqueue(priv->queue_name);
     if (!priv->stats_queue) {
         err = -ENOMEM;
-        goto err_mg_clk;
+        goto err_port_probe;
     }
 
     platform_set_drvdata(pdev, priv);
     return 0;
 
+err_port_probe:
+    i = 0;
+    for_each_available_child_of_node(dn, port_node) {
+        if (priv->port_list[i])
+            mvpp2_port_remove(priv->port_list[i]);
+        i++;
+    }
 err_mg_clk:
     clk_disable_unprepare(priv->axi_clk);
     if (priv->hw_version == MVPP22)
-- 
2.7.4