net: fec: introduce fec_ptp_stop and use in probe fail path
PATCH 1/1 net: fec: introduce fec_ptp_stop and use in probe fail path
From: Lucas Stach <[email protected]>
[ upstream commit 32cba57ba74be58589aeb4cb6496183e46a5e3e5 ]
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.
---
Not really sure if I should send this one to David or Greg, since v3.18 is no longer officially supported, so I am sending it to both. Sorry for the noise.
This patch fixes a crash seen when running sabrelite images in a version of qemu which fixes https://bugs.launchpad.net/qemu/+bug/1753309.
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(-)
drivers/net/ethernet/freescale/fec.h +1 -0
@@ -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);
drivers/net/ethernet/freescale/fec_main.c +2 -3
@@ -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 *pdev)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);
drivers/net/ethernet/freescale/fec_ptp.c +10 -0
@@ -620,6 +620,16 @@ void fec_ptp_init(struct platform_device *pdev)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
Signature · 1 line
2.7.4
Greg Kroah-Hartman
maintainerQuoted 15 lines · Guenter Roeck
From: Lucas Stach <[email protected]>
[ upstream commit
32cba57ba74be58589aeb4cb6496183e46a5e3e5]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_inithas been called.Signed-off-by Lucas Stach <[email protected]>Acked-by Fugang Duan <[email protected]>Signed-off-by David S. Miller <[email protected]>[groeck: backport: context changes in .../fec_main.c]Signed-off-by Guenter Roeck <[email protected]>
Quoted 6 lines
---
Not really sure if I should send this one to David or Greg, since v3.18 is no longer officially supported, so I am sending it to both. Sorry for the noise.This patch fixes a crash seen when running sabrelite images in a version of qemu which fixes https://bugs.launchpad.net/qemu/+bug/1753309.
This works for me, now queued up, thanks.
greg k-h