From: Greg Kroah-Hartman Date: Wed, 7 Mar 2018 17:35:47 +0000 (-0800) Subject: 3.18-stable patches X-Git-Tag: v4.14.25~20 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=34ae2b8220706bb08cb1178fd8bf8d4a0edb1108;p=thirdparty%2Fkernel%2Fstable-queue.git 3.18-stable patches added patches: net-fec-introduce-fec_ptp_stop-and-use-in-probe-fail-path.patch --- diff --git a/queue-3.18/net-fec-introduce-fec_ptp_stop-and-use-in-probe-fail-path.patch b/queue-3.18/net-fec-introduce-fec_ptp_stop-and-use-in-probe-fail-path.patch new file mode 100644 index 00000000000..58f1206d6d8 --- /dev/null +++ b/queue-3.18/net-fec-introduce-fec_ptp_stop-and-use-in-probe-fail-path.patch @@ -0,0 +1,83 @@ +From 32cba57ba74be58589aeb4cb6496183e46a5e3e5 Mon Sep 17 00:00:00 2001 +From: Lucas Stach +Date: Thu, 23 Jul 2015 16:06:20 +0200 +Subject: net: fec: introduce fec_ptp_stop and use in probe fail path + +From: Lucas Stach + +commit 32cba57ba74be58589aeb4cb6496183e46a5e3e5 upstream. + +This function frees resources and cancels delayed work item that +have been initialized in fec_ptp_init(). + +Use this to do proper error handling if something goes wrong in +probe function after fec_ptp_init has been called. + +Signed-off-by: Lucas Stach +Acked-by: Fugang Duan +Signed-off-by: David S. Miller +[groeck: backport: context changes in .../fec_main.c] +Signed-off-by: Guenter Roeck +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/net/ethernet/freescale/fec.h | 1 + + drivers/net/ethernet/freescale/fec_main.c | 5 ++--- + drivers/net/ethernet/freescale/fec_ptp.c | 10 ++++++++++ + 3 files changed, 13 insertions(+), 3 deletions(-) + +--- a/drivers/net/ethernet/freescale/fec.h ++++ b/drivers/net/ethernet/freescale/fec.h +@@ -546,6 +546,7 @@ struct fec_enet_private { + }; + + void fec_ptp_init(struct platform_device *pdev); ++void fec_ptp_stop(struct platform_device *pdev); + void fec_ptp_start_cyclecounter(struct net_device *ndev); + int fec_ptp_set(struct net_device *ndev, struct ifreq *ifr); + int fec_ptp_get(struct net_device *ndev, struct ifreq *ifr); +--- a/drivers/net/ethernet/freescale/fec_main.c ++++ b/drivers/net/ethernet/freescale/fec_main.c +@@ -3312,6 +3312,7 @@ failed_register: + failed_mii_init: + failed_irq: + failed_init: ++ fec_ptp_stop(pdev); + if (fep->reg_phy) + regulator_disable(fep->reg_phy); + failed_regulator: +@@ -3331,14 +3332,12 @@ fec_drv_remove(struct platform_device *p + struct net_device *ndev = platform_get_drvdata(pdev); + struct fec_enet_private *fep = netdev_priv(ndev); + +- cancel_delayed_work_sync(&fep->time_keep); + cancel_work_sync(&fep->tx_timeout_work); ++ fec_ptp_stop(pdev); + unregister_netdev(ndev); + fec_enet_mii_remove(fep); + if (fep->reg_phy) + regulator_disable(fep->reg_phy); +- if (fep->ptp_clock) +- ptp_clock_unregister(fep->ptp_clock); + fec_enet_clk_enable(ndev, false); + of_node_put(fep->phy_node); + free_netdev(ndev); +--- a/drivers/net/ethernet/freescale/fec_ptp.c ++++ b/drivers/net/ethernet/freescale/fec_ptp.c +@@ -620,6 +620,16 @@ void fec_ptp_init(struct platform_device + schedule_delayed_work(&fep->time_keep, HZ); + } + ++void fec_ptp_stop(struct platform_device *pdev) ++{ ++ struct net_device *ndev = platform_get_drvdata(pdev); ++ struct fec_enet_private *fep = netdev_priv(ndev); ++ ++ cancel_delayed_work_sync(&fep->time_keep); ++ if (fep->ptp_clock) ++ ptp_clock_unregister(fep->ptp_clock); ++} ++ + /** + * fec_ptp_check_pps_event + * @fep: the fec_enet_private structure handle diff --git a/queue-3.18/series b/queue-3.18/series index 0621e67c771..66cd6bd49f9 100644 --- a/queue-3.18/series +++ b/queue-3.18/series @@ -4,3 +4,4 @@ alsa-usb-audio-add-a-quirck-for-b-w-px-headphones.patch cpufreq-s3c24xx-fix-broken-s3c_cpufreq_init.patch arm-mvebu-fix-broken-pl310_errata_753970-selects.patch kvm-x86-fix-smram-accessing-even-if-vm-is-shutdown.patch +net-fec-introduce-fec_ptp_stop-and-use-in-probe-fail-path.patch