+++ /dev/null
-From cda5c15b23fb9d683a491e8bd137d11d8552ac02 Mon Sep 17 00:00:00 2001
-From: Neil Armstrong <narmstrong@baylibre.com>
-Date: Mon, 7 Dec 2015 13:57:35 +0100
-Subject: net: dsa: move dsa slave destroy code to slave.c
-
-From: Neil Armstrong <narmstrong@baylibre.com>
-
-commit cda5c15b23fb9d683a491e8bd137d11d8552ac02 upstream.
-
-Move dsa slave dedicated code from dsa_switch_destroy to a new
-dsa_slave_destroy function in slave.c.
-Add the netif_carrier_off and phy_disconnect calls in order to
-correctly cleanup the netdev state and PHY state machine.
-
-Signed-off-by: Frode Isaksen <fisaksen@baylibre.com>
-Signed-off-by: Neil Armstrong <narmstrong@baylibre.com>
-Signed-off-by: David S. Miller <davem@davemloft.net>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
----
- net/dsa/dsa.c | 3 +--
- net/dsa/dsa_priv.h | 1 +
- net/dsa/slave.c | 11 +++++++++++
- 3 files changed, 13 insertions(+), 2 deletions(-)
-
---- a/net/dsa/dsa.c
-+++ b/net/dsa/dsa.c
-@@ -454,8 +454,7 @@ static void dsa_switch_destroy(struct ds
- if (!ds->ports[port])
- continue;
-
-- unregister_netdev(ds->ports[port]);
-- free_netdev(ds->ports[port]);
-+ dsa_slave_destroy(ds->ports[port]);
- }
-
- mdiobus_unregister(ds->slave_mii_bus);
---- a/net/dsa/dsa_priv.h
-+++ b/net/dsa/dsa_priv.h
-@@ -61,6 +61,7 @@ extern const struct dsa_device_ops notag
- void dsa_slave_mii_bus_init(struct dsa_switch *ds);
- int dsa_slave_create(struct dsa_switch *ds, struct device *parent,
- int port, char *name);
-+void dsa_slave_destroy(struct net_device *slave_dev);
- int dsa_slave_suspend(struct net_device *slave_dev);
- int dsa_slave_resume(struct net_device *slave_dev);
- int dsa_slave_netdevice_event(struct notifier_block *unused,
---- a/net/dsa/slave.c
-+++ b/net/dsa/slave.c
-@@ -1225,6 +1225,17 @@ int dsa_slave_create(struct dsa_switch *
- return 0;
- }
-
-+void dsa_slave_destroy(struct net_device *slave_dev)
-+{
-+ struct dsa_slave_priv *p = netdev_priv(slave_dev);
-+
-+ netif_carrier_off(slave_dev);
-+ if (p->phy)
-+ phy_disconnect(p->phy);
-+ unregister_netdev(slave_dev);
-+ free_netdev(slave_dev);
-+}
-+
- static bool dsa_slave_dev_check(struct net_device *dev)
- {
- return dev->netdev_ops == &dsa_slave_netdev_ops;
+++ /dev/null
-From 881eadabe71fa78c081eda3cd5701768f3778a21 Mon Sep 17 00:00:00 2001
-From: Johan Hovold <johan@kernel.org>
-Date: Mon, 28 Nov 2016 19:25:09 +0100
-Subject: net: dsa: slave: fix fixed-link phydev leaks
-
-From: Johan Hovold <johan@kernel.org>
-
-commit 881eadabe71fa78c081eda3cd5701768f3778a21 upstream.
-
-Make sure to deregister and free any fixed-link PHY registered using
-of_phy_register_fixed_link() on slave-setup errors and on slave destroy.
-
-Fixes: 0d8bcdd383b8 ("net: dsa: allow for more complex PHY setups")
-Signed-off-by: Johan Hovold <johan@kernel.org>
-Signed-off-by: David S. Miller <davem@davemloft.net>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
----
- net/dsa/slave.c | 2 ++
- 1 file changed, 2 insertions(+)
-
---- a/net/dsa/slave.c
-+++ b/net/dsa/slave.c
-@@ -1083,6 +1083,8 @@ static int dsa_slave_phy_setup(struct ds
- ret = dsa_slave_phy_connect(p, slave_dev, p->port);
- if (ret) {
- netdev_err(slave_dev, "failed to connect to port %d: %d\n", p->port, ret);
-+ if (phy_is_fixed)
-+ of_phy_deregister_fixed_link(port_dn);
- return ret;
- }
- } else {
+++ /dev/null
-From 140ca9d3471c424ab4c4036ab8d8d995f24a9c5b Mon Sep 17 00:00:00 2001
-From: Johan Hovold <johan@kernel.org>
-Date: Mon, 28 Nov 2016 19:24:59 +0100
-Subject: net: ethernet: bcmgenet: fix fixed-link phydev leaks
-
-From: Johan Hovold <johan@kernel.org>
-
-commit 140ca9d3471c424ab4c4036ab8d8d995f24a9c5b upstream.
-
-Make sure to deregister and free any fixed-link PHY registered using
-of_phy_register_fixed_link() on probe errors and on driver unbind.
-
-Note that we're still leaking any fixed-link PHY registered in the
-non-OF probe path.
-
-Fixes: 9abf0c2b717a ("net: bcmgenet: use the new fixed PHY helpers")
-Signed-off-by: Johan Hovold <johan@kernel.org>
-Signed-off-by: David S. Miller <davem@davemloft.net>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
----
- drivers/net/ethernet/broadcom/genet/bcmmii.c | 6 ++++++
- 1 file changed, 6 insertions(+)
-
---- a/drivers/net/ethernet/broadcom/genet/bcmmii.c
-+++ b/drivers/net/ethernet/broadcom/genet/bcmmii.c
-@@ -629,6 +629,7 @@ static int bcmgenet_mii_bus_init(struct
- int bcmgenet_mii_init(struct net_device *dev)
- {
- struct bcmgenet_priv *priv = netdev_priv(dev);
-+ struct device_node *dn = priv->pdev->dev.of_node;
- int ret;
-
- ret = bcmgenet_mii_alloc(priv);
-@@ -642,6 +643,8 @@ int bcmgenet_mii_init(struct net_device
- return 0;
-
- out:
-+ if (of_phy_is_fixed_link(dn))
-+ of_phy_deregister_fixed_link(dn);
- of_node_put(priv->phy_dn);
- mdiobus_unregister(priv->mii_bus);
- kfree(priv->mii_bus->irq);
-@@ -652,7 +655,10 @@ out:
- void bcmgenet_mii_exit(struct net_device *dev)
- {
- struct bcmgenet_priv *priv = netdev_priv(dev);
-+ struct device_node *dn = priv->pdev->dev.of_node;
-
-+ if (of_phy_is_fixed_link(dn))
-+ of_phy_deregister_fixed_link(dn);
- of_node_put(priv->phy_dn);
- mdiobus_unregister(priv->mii_bus);
- kfree(priv->mii_bus->irq);
+++ /dev/null
-From 39f8b0d426e0b3e04ddf4c6ef0ae28873c0f8c0f Mon Sep 17 00:00:00 2001
-From: Johan Hovold <johan@kernel.org>
-Date: Mon, 28 Nov 2016 19:24:58 +0100
-Subject: net: ethernet: bcmsysport: fix fixed-link phydev leaks
-
-From: Johan Hovold <johan@kernel.org>
-
-commit 39f8b0d426e0b3e04ddf4c6ef0ae28873c0f8c0f upstream.
-
-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: 186534a3f832 ("net: systemport: use the new fixed PHY helpers")
-Signed-off-by: Johan Hovold <johan@kernel.org>
-Signed-off-by: David S. Miller <davem@davemloft.net>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
----
- drivers/net/ethernet/broadcom/bcmsysport.c | 17 ++++++++++++-----
- 1 file changed, 12 insertions(+), 5 deletions(-)
-
---- a/drivers/net/ethernet/broadcom/bcmsysport.c
-+++ b/drivers/net/ethernet/broadcom/bcmsysport.c
-@@ -1781,13 +1781,13 @@ static int bcm_sysport_probe(struct plat
- if (priv->irq0 <= 0 || priv->irq1 <= 0) {
- dev_err(&pdev->dev, "invalid interrupts\n");
- ret = -EINVAL;
-- goto err;
-+ goto err_free_netdev;
- }
-
- priv->base = devm_ioremap_resource(&pdev->dev, r);
- if (IS_ERR(priv->base)) {
- ret = PTR_ERR(priv->base);
-- goto err;
-+ goto err_free_netdev;
- }
-
- priv->netdev = dev;
-@@ -1805,7 +1805,7 @@ static int bcm_sysport_probe(struct plat
- ret = of_phy_register_fixed_link(dn);
- if (ret) {
- dev_err(&pdev->dev, "failed to register fixed PHY\n");
-- goto err;
-+ goto err_free_netdev;
- }
-
- priv->phy_dn = dn;
-@@ -1847,7 +1847,7 @@ static int bcm_sysport_probe(struct plat
- ret = register_netdev(dev);
- if (ret) {
- dev_err(&pdev->dev, "failed to register net_device\n");
-- goto err;
-+ goto err_deregister_fixed_link;
- }
-
- priv->rev = topctrl_readl(priv, REV_CNTL) & REV_MASK;
-@@ -1858,7 +1858,11 @@ static int bcm_sysport_probe(struct plat
- priv->base, priv->irq0, priv->irq1, txq, rxq);
-
- return 0;
--err:
-+
-+err_deregister_fixed_link:
-+ if (of_phy_is_fixed_link(dn))
-+ of_phy_deregister_fixed_link(dn);
-+err_free_netdev:
- free_netdev(dev);
- return ret;
- }
-@@ -1866,11 +1870,14 @@ err:
- static int bcm_sysport_remove(struct platform_device *pdev)
- {
- struct net_device *dev = dev_get_drvdata(&pdev->dev);
-+ struct device_node *dn = pdev->dev.of_node;
-
- /* Not much to do, ndo_close has been called
- * and we use managed allocations
- */
- unregister_netdev(dev);
-+ if (of_phy_is_fixed_link(dn))
-+ of_phy_deregister_fixed_link(dn);
- free_netdev(dev);
- dev_set_drvdata(&pdev->dev, NULL);
-
+++ /dev/null
-From 82005b1c19b11998ea98532d742c021a19f948d7 Mon Sep 17 00:00:00 2001
-From: Johan Hovold <johan@kernel.org>
-Date: Mon, 28 Nov 2016 19:25:00 +0100
-Subject: net: ethernet: fec: fix fixed-link phydev leaks
-
-From: Johan Hovold <johan@kernel.org>
-
-commit 82005b1c19b11998ea98532d742c021a19f948d7 upstream.
-
-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: 407066f8f371 ("net: fec: Support phys probed from devicetree and
-fixed-link")
-Signed-off-by: Johan Hovold <johan@kernel.org>
-Signed-off-by: David S. Miller <davem@davemloft.net>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
----
- drivers/net/ethernet/freescale/fec_main.c | 5 +++++
- 1 file changed, 5 insertions(+)
-
---- a/drivers/net/ethernet/freescale/fec_main.c
-+++ b/drivers/net/ethernet/freescale/fec_main.c
-@@ -3519,6 +3519,8 @@ failed_regulator:
- failed_clk_ipg:
- fec_enet_clk_enable(ndev, false);
- failed_clk:
-+ if (of_phy_is_fixed_link(np))
-+ of_phy_deregister_fixed_link(np);
- failed_phy:
- of_node_put(phy_node);
- failed_ioremap:
-@@ -3532,6 +3534,7 @@ fec_drv_remove(struct platform_device *p
- {
- struct net_device *ndev = platform_get_drvdata(pdev);
- struct fec_enet_private *fep = netdev_priv(ndev);
-+ struct device_node *np = pdev->dev.of_node;
-
- cancel_work_sync(&fep->tx_timeout_work);
- fec_ptp_stop(pdev);
-@@ -3541,6 +3544,8 @@ fec_drv_remove(struct platform_device *p
- regulator_disable(fep->reg_phy);
- pm_runtime_put(&pdev->dev);
- pm_runtime_disable(&pdev->dev);
-+ if (of_phy_is_fixed_link(np))
-+ of_phy_deregister_fixed_link(np);
- of_node_put(fep->phy_node);
- free_netdev(ndev);
-
+++ /dev/null
-From b9755f03728b21c36375a47a6c6366e00b4f2062 Mon Sep 17 00:00:00 2001
-From: Johan Hovold <johan@kernel.org>
-Date: Mon, 28 Nov 2016 19:25:01 +0100
-Subject: net: ethernet: fs_enet: fix fixed-link phydev leaks
-
-From: Johan Hovold <johan@kernel.org>
-
-commit b9755f03728b21c36375a47a6c6366e00b4f2062 upstream.
-
-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: bb74d9a4a87b ("fs_enet: use the new fixed PHY helpers")
-Signed-off-by: Johan Hovold <johan@kernel.org>
-Signed-off-by: David S. Miller <davem@davemloft.net>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
----
- drivers/net/ethernet/freescale/fs_enet/fs_enet-main.c | 7 ++++++-
- 1 file changed, 6 insertions(+), 1 deletion(-)
-
---- a/drivers/net/ethernet/freescale/fs_enet/fs_enet-main.c
-+++ b/drivers/net/ethernet/freescale/fs_enet/fs_enet-main.c
-@@ -996,7 +996,7 @@ static int fs_enet_probe(struct platform
- err = clk_prepare_enable(clk);
- if (err) {
- ret = err;
-- goto out_free_fpi;
-+ goto out_deregister_fixed_link;
- }
- fpi->clk_per = clk;
- }
-@@ -1078,6 +1078,9 @@ out_put:
- of_node_put(fpi->phy_node);
- if (fpi->clk_per)
- clk_disable_unprepare(fpi->clk_per);
-+out_deregister_fixed_link:
-+ if (of_phy_is_fixed_link(ofdev->dev.of_node))
-+ of_phy_deregister_fixed_link(ofdev->dev.of_node);
- out_free_fpi:
- kfree(fpi);
- return ret;
-@@ -1096,6 +1099,8 @@ static int fs_enet_remove(struct platfor
- of_node_put(fep->fpi->phy_node);
- if (fep->fpi->clk_per)
- clk_disable_unprepare(fep->fpi->clk_per);
-+ if (of_phy_is_fixed_link(ofdev->dev.of_node))
-+ of_phy_deregister_fixed_link(ofdev->dev.of_node);
- free_netdev(ndev);
- return 0;
- }
+++ /dev/null
-From 42c70042458d74ce049ce4a2ea7702f344a0dc0b Mon Sep 17 00:00:00 2001
-From: Johan Hovold <johan@kernel.org>
-Date: Mon, 28 Nov 2016 19:25:02 +0100
-Subject: net: ethernet: gianfar: fix fixed-link phydev leaks
-
-From: Johan Hovold <johan@kernel.org>
-
-commit 42c70042458d74ce049ce4a2ea7702f344a0dc0b upstream.
-
-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: be40364544bd ("gianfar: use the new fixed PHY helpers")
-Signed-off-by: Johan Hovold <johan@kernel.org>
-Signed-off-by: David S. Miller <davem@davemloft.net>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
----
- drivers/net/ethernet/freescale/gianfar.c | 8 ++++++++
- 1 file changed, 8 insertions(+)
-
---- a/drivers/net/ethernet/freescale/gianfar.c
-+++ b/drivers/net/ethernet/freescale/gianfar.c
-@@ -1313,6 +1313,7 @@ static void gfar_init_addr_hash_table(st
- */
- static int gfar_probe(struct platform_device *ofdev)
- {
-+ struct device_node *np = ofdev->dev.of_node;
- struct net_device *dev = NULL;
- struct gfar_private *priv = NULL;
- int err = 0, i;
-@@ -1465,6 +1466,8 @@ static int gfar_probe(struct platform_de
- return 0;
-
- register_fail:
-+ if (of_phy_is_fixed_link(np))
-+ of_phy_deregister_fixed_link(np);
- unmap_group_regs(priv);
- gfar_free_rx_queues(priv);
- gfar_free_tx_queues(priv);
-@@ -1477,11 +1480,16 @@ register_fail:
- static int gfar_remove(struct platform_device *ofdev)
- {
- struct gfar_private *priv = platform_get_drvdata(ofdev);
-+ struct device_node *np = ofdev->dev.of_node;
-
- of_node_put(priv->phy_node);
- of_node_put(priv->tbi_node);
-
- unregister_netdev(priv->ndev);
-+
-+ if (of_phy_is_fixed_link(np))
-+ of_phy_deregister_fixed_link(np);
-+
- unmap_group_regs(priv);
- gfar_free_rx_queues(priv);
- gfar_free_tx_queues(priv);
+++ /dev/null
-From 5a57a304315c09f9f93b7b7230a5038555e7fcf9 Mon Sep 17 00:00:00 2001
-From: Johan Hovold <johan@kernel.org>
-Date: Mon, 28 Nov 2016 19:25:04 +0100
-Subject: net: ethernet: marvell: mvneta: fix fixed-link phydev leaks
-
-From: Johan Hovold <johan@kernel.org>
-
-commit 5a57a304315c09f9f93b7b7230a5038555e7fcf9 upstream.
-
-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>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
----
- drivers/net/ethernet/marvell/mvneta.c | 5 +++++
- 1 file changed, 5 insertions(+)
-
---- a/drivers/net/ethernet/marvell/mvneta.c
-+++ b/drivers/net/ethernet/marvell/mvneta.c
-@@ -3438,6 +3438,8 @@ err_clk:
- clk_disable_unprepare(pp->clk);
- err_put_phy_node:
- of_node_put(phy_node);
-+ if (of_phy_is_fixed_link(dn))
-+ of_phy_deregister_fixed_link(dn);
- err_free_irq:
- irq_dispose_mapping(dev->irq);
- err_free_netdev:
-@@ -3449,12 +3451,15 @@ err_free_netdev:
- static int mvneta_remove(struct platform_device *pdev)
- {
- struct net_device *dev = platform_get_drvdata(pdev);
-+ struct device_node *dn = pdev->dev.of_node;
- struct mvneta_port *pp = netdev_priv(dev);
-
- unregister_netdev(dev);
- clk_disable_unprepare(pp->clk);
- free_percpu(pp->ports);
- free_percpu(pp->stats);
-+ if (of_phy_is_fixed_link(dn))
-+ of_phy_deregister_fixed_link(dn);
- irq_dispose_mapping(dev->irq);
- of_node_put(pp->phy_node);
- free_netdev(dev);
+++ /dev/null
-From 14cab6f6510c498c2fd55d4fd6063a91b477d2ff Mon Sep 17 00:00:00 2001
-From: Johan Hovold <johan@kernel.org>
-Date: Mon, 28 Nov 2016 19:25:08 +0100
-Subject: net: ethernet: ti: davinci_emac: fix fixed-link phydev and of-node leaks
-
-From: Johan Hovold <johan@kernel.org>
-
-commit 14cab6f6510c498c2fd55d4fd6063a91b477d2ff upstream.
-
-Make sure to deregister and free any fixed-link PHY registered using
-of_phy_register_fixed_link() on probe errors and on driver unbind.
-
-Also remember to put the of-node reference on probe errors.
-
-Fixes: 1bb6aa56bb38 ("net: davinci_emac: Add support for fixed-link
-PHY")
-Signed-off-by: Johan Hovold <johan@kernel.org>
-Signed-off-by: David S. Miller <davem@davemloft.net>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
----
- drivers/net/ethernet/ti/davinci_emac.c | 10 +++++++++-
- 1 file changed, 9 insertions(+), 1 deletion(-)
-
---- a/drivers/net/ethernet/ti/davinci_emac.c
-+++ b/drivers/net/ethernet/ti/davinci_emac.c
-@@ -1909,6 +1909,7 @@ static int davinci_emac_try_get_mac(stru
- */
- static int davinci_emac_probe(struct platform_device *pdev)
- {
-+ struct device_node *np = pdev->dev.of_node;
- int rc = 0;
- struct resource *res, *res_ctrl;
- struct net_device *ndev;
-@@ -1947,7 +1948,7 @@ static int davinci_emac_probe(struct pla
- if (!pdata) {
- dev_err(&pdev->dev, "no platform data\n");
- rc = -ENODEV;
-- goto no_pdata;
-+ goto err_free_netdev;
- }
-
- /* MAC addr and PHY mask , RMII enable info from platform_data */
-@@ -2083,6 +2084,10 @@ no_cpdma_chan:
- cpdma_chan_destroy(priv->rxchan);
- cpdma_ctlr_destroy(priv->dma);
- no_pdata:
-+ if (of_phy_is_fixed_link(np))
-+ of_phy_deregister_fixed_link(np);
-+ of_node_put(priv->phy_node);
-+err_free_netdev:
- free_netdev(ndev);
- return rc;
- }
-@@ -2098,6 +2103,7 @@ static int davinci_emac_remove(struct pl
- {
- struct net_device *ndev = platform_get_drvdata(pdev);
- struct emac_priv *priv = netdev_priv(ndev);
-+ struct device_node *np = pdev->dev.of_node;
-
- dev_notice(&ndev->dev, "DaVinci EMAC: davinci_emac_remove()\n");
-
-@@ -2109,6 +2115,8 @@ static int davinci_emac_remove(struct pl
-
- unregister_netdev(ndev);
- of_node_put(priv->phy_node);
-+ if (of_phy_is_fixed_link(np))
-+ of_phy_deregister_fixed_link(np);
- free_netdev(ndev);
-
- return 0;
+++ /dev/null
-From 0807c4ceb8d171a116edc33e34166416876cae5d Mon Sep 17 00:00:00 2001
-From: Johan Hovold <johan@kernel.org>
-Date: Mon, 28 Nov 2016 19:25:03 +0100
-Subject: net: ethernet: ucc_geth: fix fixed-link phydev leaks
-
-From: Johan Hovold <johan@kernel.org>
-
-commit 0807c4ceb8d171a116edc33e34166416876cae5d upstream.
-
-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: 87009814cdbb ("ucc_geth: use the new fixed PHY helpers")
-Signed-off-by: Johan Hovold <johan@kernel.org>
-Signed-off-by: David S. Miller <davem@davemloft.net>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
----
- drivers/net/ethernet/freescale/ucc_geth.c | 23 ++++++++++++++++-------
- 1 file changed, 16 insertions(+), 7 deletions(-)
-
---- a/drivers/net/ethernet/freescale/ucc_geth.c
-+++ b/drivers/net/ethernet/freescale/ucc_geth.c
-@@ -3870,9 +3870,8 @@ static int ucc_geth_probe(struct platfor
- dev = alloc_etherdev(sizeof(*ugeth));
-
- if (dev == NULL) {
-- of_node_put(ug_info->tbi_node);
-- of_node_put(ug_info->phy_node);
-- return -ENOMEM;
-+ err = -ENOMEM;
-+ goto err_deregister_fixed_link;
- }
-
- ugeth = netdev_priv(dev);
-@@ -3909,10 +3908,7 @@ static int ucc_geth_probe(struct platfor
- if (netif_msg_probe(ugeth))
- pr_err("%s: Cannot register net device, aborting\n",
- dev->name);
-- free_netdev(dev);
-- of_node_put(ug_info->tbi_node);
-- of_node_put(ug_info->phy_node);
-- return err;
-+ goto err_free_netdev;
- }
-
- mac_addr = of_get_mac_address(np);
-@@ -3925,16 +3921,29 @@ static int ucc_geth_probe(struct platfor
- ugeth->node = np;
-
- return 0;
-+
-+err_free_netdev:
-+ free_netdev(dev);
-+err_deregister_fixed_link:
-+ if (of_phy_is_fixed_link(np))
-+ of_phy_deregister_fixed_link(np);
-+ of_node_put(ug_info->tbi_node);
-+ of_node_put(ug_info->phy_node);
-+
-+ return err;
- }
-
- static int ucc_geth_remove(struct platform_device* ofdev)
- {
- struct net_device *dev = platform_get_drvdata(ofdev);
- struct ucc_geth_private *ugeth = netdev_priv(dev);
-+ struct device_node *np = ofdev->dev.of_node;
-
- unregister_netdev(dev);
- free_netdev(dev);
- ucc_geth_memclean(ugeth);
-+ if (of_phy_is_fixed_link(np))
-+ of_phy_deregister_fixed_link(np);
- of_node_put(ugeth->ug_info->tbi_node);
- of_node_put(ugeth->ug_info->phy_node);
-
+++ /dev/null
-From 3f65047c853a2a5abcd8ac1984af3452b5df4ada Mon Sep 17 00:00:00 2001
-From: Johan Hovold <johan@kernel.org>
-Date: Mon, 28 Nov 2016 19:24:55 +0100
-Subject: of_mdio: add helper to deregister fixed-link PHYs
-
-From: Johan Hovold <johan@kernel.org>
-
-commit 3f65047c853a2a5abcd8ac1984af3452b5df4ada upstream.
-
-Add helper to deregister fixed-link PHYs registered using
-of_phy_register_fixed_link().
-
-Convert the two drivers that care to deregister their fixed-link PHYs to
-use the new helper, but note that most drivers currently fail to do so.
-
-Signed-off-by: Johan Hovold <johan@kernel.org>
-Signed-off-by: David S. Miller <davem@davemloft.net>
-[only take helper function for 4.4.y - gregkh]
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
----
- drivers/of/of_mdio.c | 15 +++++++++++++++
- include/linux/of_mdio.h | 4 ++++
- 2 files changed, 19 insertions(+)
-
---- a/drivers/of/of_mdio.c
-+++ b/drivers/of/of_mdio.c
-@@ -367,4 +367,19 @@ int of_phy_register_fixed_link(struct de
- return -ENODEV;
- }
- EXPORT_SYMBOL(of_phy_register_fixed_link);
-+
-+void of_phy_deregister_fixed_link(struct device_node *np)
-+{
-+ struct phy_device *phydev;
-+
-+ phydev = of_phy_find_device(np);
-+ if (!phydev)
-+ return;
-+
-+ fixed_phy_unregister(phydev);
-+
-+ put_device(&phydev->mdio.dev); /* of_phy_find_device() */
-+ phy_device_free(phydev); /* fixed_phy_register() */
-+}
-+EXPORT_SYMBOL(of_phy_deregister_fixed_link);
- #endif
---- a/include/linux/of_mdio.h
-+++ b/include/linux/of_mdio.h
-@@ -71,12 +71,16 @@ static inline int of_mdio_parse_addr(str
-
- #if defined(CONFIG_OF) && defined(CONFIG_FIXED_PHY)
- extern int of_phy_register_fixed_link(struct device_node *np);
-+extern void of_phy_deregister_fixed_link(struct device_node *np);
- extern bool of_phy_is_fixed_link(struct device_node *np);
- #else
- static inline int of_phy_register_fixed_link(struct device_node *np)
- {
- return -ENOSYS;
- }
-+static inline void of_phy_deregister_fixed_link(struct device_node *np)
-+{
-+}
- static inline bool of_phy_is_fixed_link(struct device_node *np)
- {
- return false;
net_sched-flower-avoid-dissection-of-unmasked-keys.patch
pkt_sched-fq-use-proper-locking-in-fq_dump_stats.patch
sched-preempt-fix-preempt_count-manipulations.patch
-of_mdio-add-helper-to-deregister-fixed-link-phys.patch
-net-ethernet-fs_enet-fix-fixed-link-phydev-leaks.patch
-net-ethernet-gianfar-fix-fixed-link-phydev-leaks.patch
-net-ethernet-marvell-mvneta-fix-fixed-link-phydev-leaks.patch
-net-ethernet-ucc_geth-fix-fixed-link-phydev-leaks.patch
-net-ethernet-bcmsysport-fix-fixed-link-phydev-leaks.patch
-net-ethernet-bcmgenet-fix-fixed-link-phydev-leaks.patch
-net-ethernet-fec-fix-fixed-link-phydev-leaks.patch
-net-ethernet-ti-davinci_emac-fix-fixed-link-phydev-and-of-node-leaks.patch
-net-dsa-move-dsa-slave-destroy-code-to-slave.c.patch
-net-dsa-slave-fix-fixed-link-phydev-leaks.patch
power-bq27xxx-fix-reading-for-bq27000-and-bq27010.patch
power-bq27xxx-fix-register-numbers-of-bq27500.patch
power-test_power-correctly-handle-empty-writes.patch