diff options
author | Johan Hovold <johan@kernel.org> | 2016-11-28 13:25:04 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2016-11-29 23:17:02 -0500 |
commit | 5a57a304315c09f9f93b7b7230a5038555e7fcf9 (patch) | |
tree | 93391cf1b8a62398f445aded01ad002c7e43d97a | |
parent | 0807c4ceb8d171a116edc33e34166416876cae5d (diff) |
net: ethernet: marvell: mvneta: fix fixed-link phydev leaks
Make sure to deregister and free any fixed-link PHY registered using
of_phy_register_fixed_link() on probe errors and on driver unbind.
Fixes: 83895bedeee6 ("net: mvneta: add support for fixed links")
Signed-off-by: Johan Hovold <johan@kernel.org>
Reviewed-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | drivers/net/ethernet/marvell/mvneta.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/drivers/net/ethernet/marvell/mvneta.c b/drivers/net/ethernet/marvell/mvneta.c index 0c0a45af950f..707bc4680b9b 100644 --- a/drivers/net/ethernet/marvell/mvneta.c +++ b/drivers/net/ethernet/marvell/mvneta.c | |||
@@ -4191,6 +4191,8 @@ err_clk: | |||
4191 | clk_disable_unprepare(pp->clk); | 4191 | clk_disable_unprepare(pp->clk); |
4192 | err_put_phy_node: | 4192 | err_put_phy_node: |
4193 | of_node_put(phy_node); | 4193 | of_node_put(phy_node); |
4194 | if (of_phy_is_fixed_link(dn)) | ||
4195 | of_phy_deregister_fixed_link(dn); | ||
4194 | err_free_irq: | 4196 | err_free_irq: |
4195 | irq_dispose_mapping(dev->irq); | 4197 | irq_dispose_mapping(dev->irq); |
4196 | err_free_netdev: | 4198 | err_free_netdev: |
@@ -4202,6 +4204,7 @@ err_free_netdev: | |||
4202 | static int mvneta_remove(struct platform_device *pdev) | 4204 | static int mvneta_remove(struct platform_device *pdev) |
4203 | { | 4205 | { |
4204 | struct net_device *dev = platform_get_drvdata(pdev); | 4206 | struct net_device *dev = platform_get_drvdata(pdev); |
4207 | struct device_node *dn = pdev->dev.of_node; | ||
4205 | struct mvneta_port *pp = netdev_priv(dev); | 4208 | struct mvneta_port *pp = netdev_priv(dev); |
4206 | 4209 | ||
4207 | unregister_netdev(dev); | 4210 | unregister_netdev(dev); |
@@ -4209,6 +4212,8 @@ static int mvneta_remove(struct platform_device *pdev) | |||
4209 | clk_disable_unprepare(pp->clk); | 4212 | clk_disable_unprepare(pp->clk); |
4210 | free_percpu(pp->ports); | 4213 | free_percpu(pp->ports); |
4211 | free_percpu(pp->stats); | 4214 | free_percpu(pp->stats); |
4215 | if (of_phy_is_fixed_link(dn)) | ||
4216 | of_phy_deregister_fixed_link(dn); | ||
4212 | irq_dispose_mapping(dev->irq); | 4217 | irq_dispose_mapping(dev->irq); |
4213 | of_node_put(pp->phy_node); | 4218 | of_node_put(pp->phy_node); |
4214 | free_netdev(dev); | 4219 | free_netdev(dev); |