dsa: factor freeing of dsa_platform_data
authorFlorian Fainelli <florian@openwrt.org>
Mon, 25 Mar 2013 05:03:39 +0000 (05:03 +0000)
committerDavid S. Miller <davem@davemloft.net>
Mon, 25 Mar 2013 16:23:41 +0000 (12:23 -0400)
This patch factors the freeing of the struct dsa_platform_data
manipulated by the driver identically in two places to a single
function.

Signed-off-by: Florian Fainelli <florian@openwrt.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/dsa/dsa.c

index 908bc11..aa2ff58 100644 (file)
@@ -343,6 +343,21 @@ out:
        return ret;
 }
 
+static void dsa_of_free_platform_data(struct dsa_platform_data *pd)
+{
+       int i;
+       int port_index;
+
+       for (i = 0; i < pd->nr_chips; i++) {
+               port_index = 0;
+               while (pd->chip[i].port_names &&
+                       pd->chip[i].port_names[++port_index])
+                       kfree(pd->chip[i].port_names[port_index]);
+               kfree(pd->chip[i].rtable);
+       }
+       kfree(pd->chip);
+}
+
 static int dsa_of_probe(struct platform_device *pdev)
 {
        struct device_node *np = pdev->dev.of_node;
@@ -354,7 +369,7 @@ static int dsa_of_probe(struct platform_device *pdev)
        const char *port_name;
        int chip_index, port_index;
        const unsigned int *sw_addr, *port_reg;
-       int ret, i;
+       int ret;
 
        mdio = of_parse_phandle(np, "dsa,mii-bus", 0);
        if (!mdio)
@@ -439,14 +454,7 @@ static int dsa_of_probe(struct platform_device *pdev)
        return 0;
 
 out_free_chip:
-       for (i = 0; i < pd->nr_chips; i++) {
-               port_index = 0;
-               while (pd->chip[i].port_names &&
-                       pd->chip[i].port_names[++port_index])
-                       kfree(pd->chip[i].port_names[port_index]);
-               kfree(pd->chip[i].rtable);
-       }
-       kfree(pd->chip);
+       dsa_of_free_platform_data(pd);
 out_free:
        kfree(pd);
        pdev->dev.platform_data = NULL;
@@ -456,21 +464,11 @@ out_free:
 static void dsa_of_remove(struct platform_device *pdev)
 {
        struct dsa_platform_data *pd = pdev->dev.platform_data;
-       int i;
-       int port_index;
 
        if (!pdev->dev.of_node)
                return;
 
-       for (i = 0; i < pd->nr_chips; i++) {
-               port_index = 0;
-               while (pd->chip[i].port_names &&
-                       pd->chip[i].port_names[++port_index])
-                       kfree(pd->chip[i].port_names[port_index]);
-               kfree(pd->chip[i].rtable);
-       }
-
-       kfree(pd->chip);
+       dsa_of_free_platform_data(pd);
        kfree(pd);
 }
 #else