Message ID | 1541022739-24678-1-git-send-email-frieder.schrempf@kontron.de |
---|---|
State | Accepted, archived |
Delegated to: | David Miller |
Headers | show |
Series | [v2] usbnet: smsc95xx: disable carrier check while suspending | expand |
> We need to make sure, that the carrier check polling is disabled while > suspending. Otherwise we can end up with usbnet_read_cmd() being issued > when only usbnet_read_cmd_nopm() is allowed. If this happens, read > operations lock up. > > Fixes: d69d169493 ("usbnet: smsc95xx: fix link detection for disabled > autonegotiation") > Cc: <stable@vger.kernel.org> > Signed-off-by: Frieder Schrempf <frieder.schrempf@kontron.de> Reviewed-by: Raghuram Chary J <RaghuramChary.Jallipalli@microchip.com> -Raghu
From: Frieder Schrempf <frieder.schrempf@kontron.de> Date: Wed, 31 Oct 2018 22:52:19 +0100 > We need to make sure, that the carrier check polling is disabled > while suspending. Otherwise we can end up with usbnet_read_cmd() > being issued when only usbnet_read_cmd_nopm() is allowed. If this > happens, read operations lock up. > > Fixes: d69d169493 ("usbnet: smsc95xx: fix link detection for disabled autonegotiation") > Cc: <stable@vger.kernel.org> > Signed-off-by: Frieder Schrempf <frieder.schrempf@kontron.de> Applied and queued up for -stable.
diff --git a/drivers/net/usb/smsc95xx.c b/drivers/net/usb/smsc95xx.c index 262e7a3..2d17f3b 100644 --- a/drivers/net/usb/smsc95xx.c +++ b/drivers/net/usb/smsc95xx.c @@ -1598,6 +1598,8 @@ static int smsc95xx_suspend(struct usb_interface *intf, pm_message_t message) return ret; } + cancel_delayed_work_sync(&pdata->carrier_check); + if (pdata->suspend_flags) { netdev_warn(dev->net, "error during last resume\n"); pdata->suspend_flags = 0; @@ -1840,6 +1842,11 @@ static int smsc95xx_suspend(struct usb_interface *intf, pm_message_t message) */ if (ret && PMSG_IS_AUTO(message)) usbnet_resume(intf); + + if (ret) + schedule_delayed_work(&pdata->carrier_check, + CARRIER_CHECK_DELAY); + return ret; }
We need to make sure, that the carrier check polling is disabled while suspending. Otherwise we can end up with usbnet_read_cmd() being issued when only usbnet_read_cmd_nopm() is allowed. If this happens, read operations lock up. Fixes: d69d169493 ("usbnet: smsc95xx: fix link detection for disabled autonegotiation") Cc: <stable@vger.kernel.org> Signed-off-by: Frieder Schrempf <frieder.schrempf@kontron.de> --- Changes in v2: * move cancel_delayed_work_sync() to correct error path drivers/net/usb/smsc95xx.c | 7 +++++++ 1 file changed, 7 insertions(+)