Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752076AbdGYOFF (ORCPT ); Tue, 25 Jul 2017 10:05:05 -0400 Received: from iolanthe.rowland.org ([192.131.102.54]:47528 "HELO iolanthe.rowland.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with SMTP id S1751799AbdGYOFE (ORCPT ); Tue, 25 Jul 2017 10:05:04 -0400 Date: Tue, 25 Jul 2017 10:05:03 -0400 (EDT) From: Alan Stern X-X-Sender: stern@iolanthe.rowland.org To: "Rafael J. Wysocki" cc: Linux USB , Linux PM , LKML , Greg Kroah-Hartman , Mathias Nyman , Felipe Balbi Subject: Re: [PATCH] PM / USB: hcd_pci: Skip secondary root hub check for HCD_DEAD() In-Reply-To: <5273465.xcnvLcBNTW@aspire.rjw.lan> Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1448 Lines: 43 On Tue, 25 Jul 2017, Rafael J. Wysocki wrote: > From: Rafael J. Wysocki > > If HCD_DEAD(hcd) is "true" in check_root_hub_suspended(), it is > rather pointless to check the secondary root hub, so return early > then. > > This actually fixes occasional suspend failures on one of my test > machines. > > Signed-off-by: Rafael J. Wysocki > --- > drivers/usb/core/hcd-pci.c | 3 +++ > 1 file changed, 3 insertions(+) > > Index: linux-pm/drivers/usb/core/hcd-pci.c > =================================================================== > --- linux-pm.orig/drivers/usb/core/hcd-pci.c > +++ linux-pm/drivers/usb/core/hcd-pci.c > @@ -427,6 +427,9 @@ static int check_root_hub_suspended(stru > dev_warn(dev, "Root hub is not suspended\n"); > return -EBUSY; > } > + if (HCD_DEAD(hcd)) > + return 0; > + > if (hcd->shared_hcd) { > hcd = hcd->shared_hcd; > if (HCD_RH_RUNNING(hcd)) { While this is an okay solution, IMO it would be more reliable and more general to have usb_hc_died() clear the HCD_FLAG_RH_RUNNING bit and set the HCD_FLAG_DEAD bit in the shared hcd. Right now it only does these things for the primary. Would you like to write and test a patch to do that? Incidentally, if this fixes occasional suspend failures on your test machine, does that mean the test machine's host controller occasionally dies? Maybe that should be fixed too... Alan Stern