Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754667Ab3JPOka (ORCPT ); Wed, 16 Oct 2013 10:40:30 -0400 Received: from iolanthe.rowland.org ([192.131.102.54]:59464 "HELO iolanthe.rowland.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with SMTP id S1751081Ab3JPOk2 (ORCPT ); Wed, 16 Oct 2013 10:40:28 -0400 Date: Wed, 16 Oct 2013 10:40:27 -0400 (EDT) From: Alan Stern X-X-Sender: stern@iolanthe.rowland.org To: Julius Werner cc: Greg Kroah-Hartman , , , Sarah Sharp , Benson Leung , Vincent Palatin , Duncan Laurie Subject: Re: [PATCH v2] usb: hub: Clear Port Reset Change during init/resume In-Reply-To: <1381884300-403-1-git-send-email-jwerner@chromium.org> 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: 1670 Lines: 40 On Tue, 15 Oct 2013, Julius Werner wrote: > This patch adds the Port Reset Change flag to the set of bits that are > preemptively cleared on init/resume of a hub. In theory this bit should > never be set unexpectedly... in practice it can still happen if BIOS, > SMM or ACPI code plays around with USB devices without cleaning up > correctly. This is especially dangerous for XHCI root hubs, which don't > generate any more Port Status Change Events until all change bits are > cleared, so this is a good precaution to have (similar to how it's > already done for the Warm Port Reset Change flag). > > Signed-off-by: Julius Werner > --- > drivers/usb/core/hub.c | 5 +++++ > 1 file changed, 5 insertions(+) > > diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c > index e6b682c..c3dd64c 100644 > --- a/drivers/usb/core/hub.c > +++ b/drivers/usb/core/hub.c > @@ -1130,6 +1130,11 @@ static void hub_activate(struct usb_hub *hub, enum hub_activation_type type) > usb_clear_port_feature(hub->hdev, port1, > USB_PORT_FEAT_C_ENABLE); > } > + if (portchange & USB_PORT_STAT_C_RESET) { > + need_debounce_delay = true; > + usb_clear_port_feature(hub->hdev, port1, > + USB_PORT_FEAT_C_RESET); > + } > if ((portchange & USB_PORT_STAT_C_BH_RESET) && > hub_is_superspeed(hub->hdev)) { > need_debounce_delay = true; Acked-by: Alan Stern -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/