]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
4.9-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 4 Dec 2019 07:14:55 +0000 (08:14 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 4 Dec 2019 07:14:55 +0000 (08:14 +0100)
added patches:
net-fec-fix-clock-count-mis-match.patch

queue-4.9/net-fec-fix-clock-count-mis-match.patch [new file with mode: 0644]
queue-4.9/series

diff --git a/queue-4.9/net-fec-fix-clock-count-mis-match.patch b/queue-4.9/net-fec-fix-clock-count-mis-match.patch
new file mode 100644 (file)
index 0000000..ca60415
--- /dev/null
@@ -0,0 +1,68 @@
+From a31eda65ba210741b598044d045480494d0ed52a Mon Sep 17 00:00:00 2001
+From: Chuhong Yuan <hslester96@gmail.com>
+Date: Wed, 20 Nov 2019 09:25:13 +0800
+Subject: net: fec: fix clock count mis-match
+
+From: Chuhong Yuan <hslester96@gmail.com>
+
+commit a31eda65ba210741b598044d045480494d0ed52a upstream.
+
+pm_runtime_put_autosuspend in probe will call runtime suspend to
+disable clks automatically if CONFIG_PM is defined. (If CONFIG_PM
+is not defined, its implementation will be empty, then runtime
+suspend will not be called.)
+
+Therefore, we can call pm_runtime_get_sync to runtime resume it
+first to enable clks, which matches the runtime suspend. (Only when
+CONFIG_PM is defined, otherwise pm_runtime_get_sync will also be
+empty, then runtime resume will not be called.)
+
+Then it is fine to disable clks without causing clock count mis-match.
+
+Fixes: c43eab3eddb4 ("net: fec: add missed clk_disable_unprepare in remove")
+Signed-off-by: Chuhong Yuan <hslester96@gmail.com>
+Acked-by: Fugang Duan <fugang.duan@nxp.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Cc: Nobuhiro Iwamatsu <nobuhiro1.iwamatsu@toshiba.co.jp>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/net/ethernet/freescale/fec_main.c |   15 +++++++++++----
+ 1 file changed, 11 insertions(+), 4 deletions(-)
+
+--- a/drivers/net/ethernet/freescale/fec_main.c
++++ b/drivers/net/ethernet/freescale/fec_main.c
+@@ -3530,6 +3530,11 @@ 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;
++      int ret;
++
++      ret = pm_runtime_get_sync(&pdev->dev);
++      if (ret < 0)
++              return ret;
+       cancel_work_sync(&fep->tx_timeout_work);
+       fec_ptp_stop(pdev);
+@@ -3537,15 +3542,17 @@ fec_drv_remove(struct platform_device *p
+       fec_enet_mii_remove(fep);
+       if (fep->reg_phy)
+               regulator_disable(fep->reg_phy);
+-      pm_runtime_put(&pdev->dev);
+-      pm_runtime_disable(&pdev->dev);
+-      clk_disable_unprepare(fep->clk_ahb);
+-      clk_disable_unprepare(fep->clk_ipg);
++
+       if (of_phy_is_fixed_link(np))
+               of_phy_deregister_fixed_link(np);
+       of_node_put(fep->phy_node);
+       free_netdev(ndev);
++      clk_disable_unprepare(fep->clk_ahb);
++      clk_disable_unprepare(fep->clk_ipg);
++      pm_runtime_put_noidle(&pdev->dev);
++      pm_runtime_disable(&pdev->dev);
++
+       return 0;
+ }
index 61375b1c61764e4cc2f5434bc24b439d6cfdc37a..b3d47892eb4fa0a6b37dd5cdac671e6c729421d3 100644 (file)
@@ -122,3 +122,4 @@ net-sched-fix-tc-s-class-show-no-bstats-on-class-with-nolock-subqueues.patch
 hid-core-check-whether-usage-page-item-is-after-usage-id-items.patch
 hwrng-stm32-fix-unbalanced-pm_runtime_enable.patch
 platform-x86-hp-wmi-fix-acpi-errors-caused-by-too-small-buffer.patch
+net-fec-fix-clock-count-mis-match.patch