From 8242200a339cba99b9b79353428d4800860de28d Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Sun, 15 Mar 2020 12:59:05 +0100 Subject: [PATCH] 4.9-stable patches added patches: net-phy-avoid-multiple-suspends.patch phy-revert-toggling-reset-changes.patch --- .../net-phy-avoid-multiple-suspends.patch | 50 ++++++++++++++ ...fluous-kmap-in-nfs_readdir_xdr_to_ar.patch | 10 +-- .../phy-revert-toggling-reset-changes.patch | 68 +++++++++++++++++++ queue-4.9/series | 2 + 4 files changed, 123 insertions(+), 7 deletions(-) create mode 100644 queue-4.9/net-phy-avoid-multiple-suspends.patch create mode 100644 queue-4.9/phy-revert-toggling-reset-changes.patch diff --git a/queue-4.9/net-phy-avoid-multiple-suspends.patch b/queue-4.9/net-phy-avoid-multiple-suspends.patch new file mode 100644 index 00000000000..03600d05242 --- /dev/null +++ b/queue-4.9/net-phy-avoid-multiple-suspends.patch @@ -0,0 +1,50 @@ +From 503ba7c6961034ff0047707685644cad9287c226 Mon Sep 17 00:00:00 2001 +From: Florian Fainelli +Date: Thu, 20 Feb 2020 15:34:53 -0800 +Subject: net: phy: Avoid multiple suspends + +From: Florian Fainelli + +commit 503ba7c6961034ff0047707685644cad9287c226 upstream. + +It is currently possible for a PHY device to be suspended as part of a +network device driver's suspend call while it is still being attached to +that net_device, either via phy_suspend() or implicitly via phy_stop(). + +Later on, when the MDIO bus controller get suspended, we would attempt +to suspend again the PHY because it is still attached to a network +device. + +This is both a waste of time and creates an opportunity for improper +clock/power management bugs to creep in. + +Fixes: 803dd9c77ac3 ("net: phy: avoid suspending twice a PHY") +Signed-off-by: Florian Fainelli +Signed-off-by: David S. Miller +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/net/phy/phy_device.c | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +--- a/drivers/net/phy/phy_device.c ++++ b/drivers/net/phy/phy_device.c +@@ -95,7 +95,7 @@ static bool mdio_bus_phy_may_suspend(str + * MDIO bus driver and clock gated at this point. + */ + if (!netdev) +- return !phydev->suspended; ++ goto out; + + /* Don't suspend PHY if the attached netdev parent may wakeup. + * The parent may point to a PCI device, as in tg3 driver. +@@ -110,7 +110,8 @@ static bool mdio_bus_phy_may_suspend(str + if (device_may_wakeup(&netdev->dev)) + return false; + +- return true; ++out: ++ return !phydev->suspended; + } + + static int mdio_bus_phy_suspend(struct device *dev) diff --git a/queue-4.9/nfs-remove-superfluous-kmap-in-nfs_readdir_xdr_to_ar.patch b/queue-4.9/nfs-remove-superfluous-kmap-in-nfs_readdir_xdr_to_ar.patch index 9713abf6925..ef9ec883e61 100644 --- a/queue-4.9/nfs-remove-superfluous-kmap-in-nfs_readdir_xdr_to_ar.patch +++ b/queue-4.9/nfs-remove-superfluous-kmap-in-nfs_readdir_xdr_to_ar.patch @@ -14,15 +14,14 @@ a content of a directory on NFS (e.g. by running ls). Fixes: 67a56e9743171 ("NFS: Fix memory leaks and corruption in readdir") Signed-off-by: Petr Malat Signed-off-by: Sasha Levin +Signed-off-by: Greg Kroah-Hartman --- - fs/nfs/dir.c | 2 -- + fs/nfs/dir.c | 2 -- 1 file changed, 2 deletions(-) -diff --git a/fs/nfs/dir.c b/fs/nfs/dir.c -index c2665d920cf8c..2517fcd423b68 100644 --- a/fs/nfs/dir.c +++ b/fs/nfs/dir.c -@@ -678,8 +678,6 @@ int nfs_readdir_xdr_to_array(nfs_readdir_descriptor_t *desc, struct page *page, +@@ -678,8 +678,6 @@ int nfs_readdir_xdr_to_array(nfs_readdir goto out_label_free; } @@ -31,6 +30,3 @@ index c2665d920cf8c..2517fcd423b68 100644 status = nfs_readdir_alloc_pages(pages, array_size); if (status < 0) goto out_release_array; --- -2.20.1 - diff --git a/queue-4.9/phy-revert-toggling-reset-changes.patch b/queue-4.9/phy-revert-toggling-reset-changes.patch new file mode 100644 index 00000000000..142ae7cdee0 --- /dev/null +++ b/queue-4.9/phy-revert-toggling-reset-changes.patch @@ -0,0 +1,68 @@ +From 7b566f70e1bf65b189b66eb3de6f431c30f7dff2 Mon Sep 17 00:00:00 2001 +From: "David S. Miller" +Date: Tue, 4 Dec 2018 08:47:44 -0800 +Subject: phy: Revert toggling reset changes. + +From: David S. Miller + +commit 7b566f70e1bf65b189b66eb3de6f431c30f7dff2 upstream. + +This reverts: + +ef1b5bf506b1 ("net: phy: Fix not to call phy_resume() if PHY is not attached") +8c85f4b81296 ("net: phy: micrel: add toggling phy reset if PHY is not attached") + +Andrew Lunn informs me that there are alternative efforts +underway to fix this more properly. + +Signed-off-by: David S. Miller +[just take the ef1b5bf506b1 revert - gregkh] +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/net/phy/phy_device.c | 11 +++++------ + 1 file changed, 5 insertions(+), 6 deletions(-) + +--- a/drivers/net/phy/phy_device.c ++++ b/drivers/net/phy/phy_device.c +@@ -80,7 +80,7 @@ static LIST_HEAD(phy_fixup_list); + static DEFINE_MUTEX(phy_fixup_lock); + + #ifdef CONFIG_PM +-static bool mdio_bus_phy_may_suspend(struct phy_device *phydev, bool suspend) ++static bool mdio_bus_phy_may_suspend(struct phy_device *phydev) + { + struct device_driver *drv = phydev->mdio.dev.driver; + struct phy_driver *phydrv = to_phy_driver(drv); +@@ -92,11 +92,10 @@ static bool mdio_bus_phy_may_suspend(str + /* PHY not attached? May suspend if the PHY has not already been + * suspended as part of a prior call to phy_disconnect() -> + * phy_detach() -> phy_suspend() because the parent netdev might be the +- * MDIO bus driver and clock gated at this point. Also may resume if +- * PHY is not attached. ++ * MDIO bus driver and clock gated at this point. + */ + if (!netdev) +- return suspend ? !phydev->suspended : phydev->suspended; ++ return !phydev->suspended; + + /* Don't suspend PHY if the attached netdev parent may wakeup. + * The parent may point to a PCI device, as in tg3 driver. +@@ -126,7 +125,7 @@ static int mdio_bus_phy_suspend(struct d + if (phydev->attached_dev && phydev->adjust_link) + phy_stop_machine(phydev); + +- if (!mdio_bus_phy_may_suspend(phydev, true)) ++ if (!mdio_bus_phy_may_suspend(phydev)) + return 0; + + return phy_suspend(phydev); +@@ -137,7 +136,7 @@ static int mdio_bus_phy_resume(struct de + struct phy_device *phydev = to_phy_device(dev); + int ret; + +- if (!mdio_bus_phy_may_suspend(phydev, false)) ++ if (!mdio_bus_phy_may_suspend(phydev)) + goto no_resume; + + ret = phy_resume(phydev); diff --git a/queue-4.9/series b/queue-4.9/series index 48d01d4b9c3..e3ed750743f 100644 --- a/queue-4.9/series +++ b/queue-4.9/series @@ -1 +1,3 @@ nfs-remove-superfluous-kmap-in-nfs_readdir_xdr_to_ar.patch +phy-revert-toggling-reset-changes.patch +net-phy-avoid-multiple-suspends.patch -- 2.47.3