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

queue-5.4/net-phy-avoid-multiple-suspends.patch [new file with mode: 0644]
queue-5.4/series

diff --git a/queue-5.4/net-phy-avoid-multiple-suspends.patch b/queue-5.4/net-phy-avoid-multiple-suspends.patch
new file mode 100644 (file)
index 0000000..7b1f6ec
--- /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
+@@ -246,7 +246,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;
+       if (netdev->wol_enabled)
+               return false;
+@@ -266,7 +266,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 4b3e040780b545e9822439f573f77a959dc9d2d5..a002750dd43d0544f54dd7815aafed64f7921f11 100644 (file)
@@ -54,3 +54,4 @@ net-ipv6-need-update-peer-route-when-modify-metric.patch
 net-ipv6-remove-the-old-peer-route-if-change-it-to-a-new-one.patch
 selftests-net-fib_tests-update-addr_metric_test-for-peer-route-testing.patch
 net-dsa-don-t-instantiate-phylink-for-cpu-dsa-ports-unless-needed.patch
+net-phy-avoid-multiple-suspends.patch