diff options
author | Florian Fainelli <florian@openwrt.org> | 2013-03-25 05:03:39 +0000 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2013-03-25 12:23:41 -0400 |
commit | 21168245031062212c0b805d0bd466ee6dd4a16f (patch) | |
tree | c962fb3124dbb8fb4f69f5a0a71e9f39d80e02cb /net/dsa | |
parent | 4c64f1f70cf3e7860bae12d62a31c137a6a4f4a7 (diff) | |
download | op-kernel-dev-21168245031062212c0b805d0bd466ee6dd4a16f.zip op-kernel-dev-21168245031062212c0b805d0bd466ee6dd4a16f.tar.gz |
dsa: factor freeing of dsa_platform_data
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>
Diffstat (limited to 'net/dsa')
-rw-r--r-- | net/dsa/dsa.c | 38 |
1 files changed, 18 insertions, 20 deletions
diff --git a/net/dsa/dsa.c b/net/dsa/dsa.c index 908bc11..aa2ff58 100644 --- a/net/dsa/dsa.c +++ b/net/dsa/dsa.c @@ -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 |