From patchwork Wed Oct 31 21:52:19 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Frieder Schrempf X-Patchwork-Id: 991720 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=kontron.de Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=as-electronics.de header.i=@as-electronics.de header.b="ELu9BL15"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 42lhsC5zC7z9sBQ for ; Thu, 1 Nov 2018 08:52:47 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726134AbeKAGwg (ORCPT ); Thu, 1 Nov 2018 02:52:36 -0400 Received: from mo4-p05-ob.smtp.rzone.de ([85.215.255.131]:26051 "EHLO mo4-p05-ob.smtp.rzone.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725919AbeKAGwg (ORCPT ); Thu, 1 Nov 2018 02:52:36 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1541022759; s=strato-dkim-0002; d=as-electronics.de; h=Message-Id:Date:Subject:Cc:To:From:X-RZG-CLASS-ID:X-RZG-AUTH:From: Subject:Sender; bh=9Y1RtC7a//bD6nhJAolmd7KfQi0hetRzg8L+qGggbco=; b=ELu9BL15qZpLL7uG59LPHLPORzOE5jyZctqRMWsolkM/KYIm5po/eljoaesQvytyYw KmsMCzQS0fOVaUBk0PA3G5WuV8MQXE1ph1cLQ4AuJdRRn7nU7uuRGm1GW8Ddo+0r3ykI B7c6wD6g60HG20sOzrslo7zEMrt0WSqkg6De7dvnyZwpB/Y/pglAkdj2OSwmZcPUyW5r SG52AqcW5s1tpB5kyZV9mQCYAr7bcHjA1IdwJOzBdUKuIhLd+XUliaNvTBC6FleWKlan 5OPIAbTqM61AOJj70HO9S/JEtqFCSiHbqEHOgP67LwUixwmRmbfhBXCCCAh2YprC+9x9 N+qQ== X-RZG-AUTH: ":LX8JdEmkW/4tAFwMkcNJIloh1hrA5u3owhPk7bdT5Fx22AatU+eLaHfutoZdl+X9BETxn4/4+IVqx+QKE8uPUyz7H84id4F0yi4r+BiOwjaTFJDezg==" X-RZG-CLASS-ID: mo05 Received: from fs-work.fritz.box by smtp.strato.de (RZmta 44.3 AUTH) with ESMTPSA id j097e4u9VLqb3bC (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA (curve secp521r1 with 521 ECDH bits, eq. 15360 bits RSA)) (Client did not present a certificate); Wed, 31 Oct 2018 22:52:37 +0100 (CET) From: Frieder Schrempf To: steve.glendinning@shawell.net, UNGLinuxDriver@microchip.com Cc: davem@davemloft.net, netdev@vger.kernel.org, linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org, Frieder Schrempf , stable@vger.kernel.org Subject: [PATCH v2] usbnet: smsc95xx: disable carrier check while suspending Date: Wed, 31 Oct 2018 22:52:19 +0100 Message-Id: <1541022739-24678-1-git-send-email-frieder.schrempf@kontron.de> X-Mailer: git-send-email 2.7.4 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org 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: Signed-off-by: Frieder Schrempf Reviewed-by: Raghuram Chary J --- Changes in v2: * move cancel_delayed_work_sync() to correct error path drivers/net/usb/smsc95xx.c | 7 +++++++ 1 file changed, 7 insertions(+) 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; }