]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
4.9-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sun, 15 Mar 2020 11:59:05 +0000 (12:59 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sun, 15 Mar 2020 11:59:05 +0000 (12:59 +0100)
added patches:
net-phy-avoid-multiple-suspends.patch
phy-revert-toggling-reset-changes.patch

queue-4.9/net-phy-avoid-multiple-suspends.patch [new file with mode: 0644]
queue-4.9/nfs-remove-superfluous-kmap-in-nfs_readdir_xdr_to_ar.patch
queue-4.9/phy-revert-toggling-reset-changes.patch [new file with mode: 0644]
queue-4.9/series

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 (file)
index 0000000..03600d0
--- /dev/null
@@ -0,0 +1,50 @@
+From 503ba7c6961034ff0047707685644cad9287c226 Mon Sep 17 00:00:00 2001
+From: Florian Fainelli <f.fainelli@gmail.com>
+Date: Thu, 20 Feb 2020 15:34:53 -0800
+Subject: net: phy: Avoid multiple suspends
+
+From: Florian Fainelli <f.fainelli@gmail.com>
+
+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 <f.fainelli@gmail.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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)
index 9713abf69251100d4b0c3eebe437bc66b4e61a26..ef9ec883e61cd37043fc04932919a605e950ebcc 100644 (file)
@@ -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 <oss@malat.biz>
 Signed-off-by: Sasha Levin <sashal@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
 ---
- 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 (file)
index 0000000..142ae7c
--- /dev/null
@@ -0,0 +1,68 @@
+From 7b566f70e1bf65b189b66eb3de6f431c30f7dff2 Mon Sep 17 00:00:00 2001
+From: "David S. Miller" <davem@davemloft.net>
+Date: Tue, 4 Dec 2018 08:47:44 -0800
+Subject: phy: Revert toggling reset changes.
+
+From: David S. Miller <davem@davemloft.net>
+
+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 <davem@davemloft.net>
+[just take the ef1b5bf506b1 revert - gregkh]
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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);
index 48d01d4b9c3fbde892433f1dbc4d5c55d80235d0..e3ed750743ffe4ff952cd9f4c4f78266f9874fbf 100644 (file)
@@ -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