From c1927a3ea889bb4e132f923bf39d554c647cb53a Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Thu, 7 May 2020 13:05:34 +0200 Subject: [PATCH] 4.4-stable patches added patches: net-dsa-move-dsa-slave-destroy-code-to-slave.c.patch net-dsa-slave-fix-fixed-link-phydev-leaks.patch net-ethernet-bcmgenet-fix-fixed-link-phydev-leaks.patch net-ethernet-bcmsysport-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 of_mdio-add-helper-to-deregister-fixed-link-phys.patch --- ...ve-dsa-slave-destroy-code-to-slave.c.patch | 67 +++++++++++++++ ...sa-slave-fix-fixed-link-phydev-leaks.patch | 32 +++++++ ...bcmgenet-fix-fixed-link-phydev-leaks.patch | 54 ++++++++++++ ...msysport-fix-fixed-link-phydev-leaks.patch | 85 +++++++++++++++++++ ...rnet-fec-fix-fixed-link-phydev-leaks.patch | 50 +++++++++++ ...-fixed-link-phydev-and-of-node-leaks.patch | 71 ++++++++++++++++ ...helper-to-deregister-fixed-link-phys.patch | 66 ++++++++++++++ queue-4.4/series | 15 +++- 8 files changed, 436 insertions(+), 4 deletions(-) create mode 100644 queue-4.4/net-dsa-move-dsa-slave-destroy-code-to-slave.c.patch create mode 100644 queue-4.4/net-dsa-slave-fix-fixed-link-phydev-leaks.patch create mode 100644 queue-4.4/net-ethernet-bcmgenet-fix-fixed-link-phydev-leaks.patch create mode 100644 queue-4.4/net-ethernet-bcmsysport-fix-fixed-link-phydev-leaks.patch create mode 100644 queue-4.4/net-ethernet-fec-fix-fixed-link-phydev-leaks.patch create mode 100644 queue-4.4/net-ethernet-ti-davinci_emac-fix-fixed-link-phydev-and-of-node-leaks.patch create mode 100644 queue-4.4/of_mdio-add-helper-to-deregister-fixed-link-phys.patch diff --git a/queue-4.4/net-dsa-move-dsa-slave-destroy-code-to-slave.c.patch b/queue-4.4/net-dsa-move-dsa-slave-destroy-code-to-slave.c.patch new file mode 100644 index 00000000000..183c2be389b --- /dev/null +++ b/queue-4.4/net-dsa-move-dsa-slave-destroy-code-to-slave.c.patch @@ -0,0 +1,67 @@ +From cda5c15b23fb9d683a491e8bd137d11d8552ac02 Mon Sep 17 00:00:00 2001 +From: Neil Armstrong +Date: Mon, 7 Dec 2015 13:57:35 +0100 +Subject: net: dsa: move dsa slave destroy code to slave.c + +From: Neil Armstrong + +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 +Signed-off-by: Neil Armstrong +Signed-off-by: David S. Miller +Signed-off-by: Greg Kroah-Hartman + +--- + 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; diff --git a/queue-4.4/net-dsa-slave-fix-fixed-link-phydev-leaks.patch b/queue-4.4/net-dsa-slave-fix-fixed-link-phydev-leaks.patch new file mode 100644 index 00000000000..30d39b0cf59 --- /dev/null +++ b/queue-4.4/net-dsa-slave-fix-fixed-link-phydev-leaks.patch @@ -0,0 +1,32 @@ +From 881eadabe71fa78c081eda3cd5701768f3778a21 Mon Sep 17 00:00:00 2001 +From: Johan Hovold +Date: Mon, 28 Nov 2016 19:25:09 +0100 +Subject: net: dsa: slave: fix fixed-link phydev leaks + +From: Johan Hovold + +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 +Signed-off-by: David S. Miller +Signed-off-by: Greg Kroah-Hartman + +--- + 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 { diff --git a/queue-4.4/net-ethernet-bcmgenet-fix-fixed-link-phydev-leaks.patch b/queue-4.4/net-ethernet-bcmgenet-fix-fixed-link-phydev-leaks.patch new file mode 100644 index 00000000000..d6a62ca137c --- /dev/null +++ b/queue-4.4/net-ethernet-bcmgenet-fix-fixed-link-phydev-leaks.patch @@ -0,0 +1,54 @@ +From 140ca9d3471c424ab4c4036ab8d8d995f24a9c5b Mon Sep 17 00:00:00 2001 +From: Johan Hovold +Date: Mon, 28 Nov 2016 19:24:59 +0100 +Subject: net: ethernet: bcmgenet: fix fixed-link phydev leaks + +From: Johan Hovold + +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 +Signed-off-by: David S. Miller +Signed-off-by: Greg Kroah-Hartman + +--- + 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); diff --git a/queue-4.4/net-ethernet-bcmsysport-fix-fixed-link-phydev-leaks.patch b/queue-4.4/net-ethernet-bcmsysport-fix-fixed-link-phydev-leaks.patch new file mode 100644 index 00000000000..2113973d20e --- /dev/null +++ b/queue-4.4/net-ethernet-bcmsysport-fix-fixed-link-phydev-leaks.patch @@ -0,0 +1,85 @@ +From 39f8b0d426e0b3e04ddf4c6ef0ae28873c0f8c0f Mon Sep 17 00:00:00 2001 +From: Johan Hovold +Date: Mon, 28 Nov 2016 19:24:58 +0100 +Subject: net: ethernet: bcmsysport: fix fixed-link phydev leaks + +From: Johan Hovold + +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 +Signed-off-by: David S. Miller +Signed-off-by: Greg Kroah-Hartman + +--- + 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); + diff --git a/queue-4.4/net-ethernet-fec-fix-fixed-link-phydev-leaks.patch b/queue-4.4/net-ethernet-fec-fix-fixed-link-phydev-leaks.patch new file mode 100644 index 00000000000..92affa5125a --- /dev/null +++ b/queue-4.4/net-ethernet-fec-fix-fixed-link-phydev-leaks.patch @@ -0,0 +1,50 @@ +From 82005b1c19b11998ea98532d742c021a19f948d7 Mon Sep 17 00:00:00 2001 +From: Johan Hovold +Date: Mon, 28 Nov 2016 19:25:00 +0100 +Subject: net: ethernet: fec: fix fixed-link phydev leaks + +From: Johan Hovold + +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 +Signed-off-by: David S. Miller +Signed-off-by: Greg Kroah-Hartman + +--- + 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); + diff --git a/queue-4.4/net-ethernet-ti-davinci_emac-fix-fixed-link-phydev-and-of-node-leaks.patch b/queue-4.4/net-ethernet-ti-davinci_emac-fix-fixed-link-phydev-and-of-node-leaks.patch new file mode 100644 index 00000000000..0cf8713b740 --- /dev/null +++ b/queue-4.4/net-ethernet-ti-davinci_emac-fix-fixed-link-phydev-and-of-node-leaks.patch @@ -0,0 +1,71 @@ +From 14cab6f6510c498c2fd55d4fd6063a91b477d2ff Mon Sep 17 00:00:00 2001 +From: Johan Hovold +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 + +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 +Signed-off-by: David S. Miller +Signed-off-by: Greg Kroah-Hartman + +--- + 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; diff --git a/queue-4.4/of_mdio-add-helper-to-deregister-fixed-link-phys.patch b/queue-4.4/of_mdio-add-helper-to-deregister-fixed-link-phys.patch new file mode 100644 index 00000000000..9e90f96b131 --- /dev/null +++ b/queue-4.4/of_mdio-add-helper-to-deregister-fixed-link-phys.patch @@ -0,0 +1,66 @@ +From 3f65047c853a2a5abcd8ac1984af3452b5df4ada Mon Sep 17 00:00:00 2001 +From: Johan Hovold +Date: Mon, 28 Nov 2016 19:24:55 +0100 +Subject: of_mdio: add helper to deregister fixed-link PHYs + +From: Johan Hovold + +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 +Signed-off-by: David S. Miller +[only take helper function for 4.4.y - gregkh] +Signed-off-by: Greg Kroah-Hartman + +--- + 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; diff --git a/queue-4.4/series b/queue-4.4/series index 0de5f99f6fe..2f3cd51795f 100644 --- a/queue-4.4/series +++ b/queue-4.4/series @@ -152,10 +152,6 @@ nfc-nci-memory-leak-in-nci_core_conn_create.patch net-phy-avoid-polling-phy-with-phy_ignore_interrupts.patch net-phy-fix-phy_mac_interrupt.patch net-phy-bcm7xxx-fix-shadow-mode-2-disabling.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 of_mdio-fix-node-leak-in-of_phy_register_fixed_link-error-path.patch phy-micrel-fix-finding-phy-properties-in-mac-node-for-ksz9031.patch phy-micrel-disable-auto-negotiation-on-startup.patch @@ -230,3 +226,14 @@ sched-fair-fix-calc_cfs_shares-fixed-point-arithmetics-width-confusion.patch 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 -- 2.47.3