On Wed, 13 Mar 2013, Adrian Bassett wrote: > > Any issues in the last couple of days? If not, I'd like to go ahead > > and submit this for inclusion in the next round of stable kernels. > > No, all's been well. Besides a vanilla 3.8.2 with just your latest > patch I have also been using a kernel with that combination plus a > fair number of additional patches - your USB revert, network, and > graphics, mainly - picked from the forthcoming 3.8.3 release. They > all seem to play well together so it would be good to have the patch > in stable. I've got a minor update to this patch. Could you please test it? This is the version I want to submit. Alan Stern Index: 3.8/drivers/usb/host/ehci-hcd.c =================================================================== --- 3.8.orig/drivers/usb/host/ehci-hcd.c +++ 3.8/drivers/usb/host/ehci-hcd.c @@ -302,6 +302,7 @@ static void ehci_quiesce (struct ehci_hc static void end_unlink_async(struct ehci_hcd *ehci); static void unlink_empty_async(struct ehci_hcd *ehci); +static void unlink_empty_async_suspended(struct ehci_hcd *ehci); static void ehci_work(struct ehci_hcd *ehci); static void start_unlink_intr(struct ehci_hcd *ehci, struct ehci_qh *qh); static void end_unlink_intr(struct ehci_hcd *ehci, struct ehci_qh *qh); Index: 3.8/drivers/usb/host/ehci-hub.c =================================================================== --- 3.8.orig/drivers/usb/host/ehci-hub.c +++ 3.8/drivers/usb/host/ehci-hub.c @@ -328,7 +328,7 @@ static int ehci_bus_suspend (struct usb_ ehci->rh_state = EHCI_RH_SUSPENDED; end_unlink_async(ehci); - unlink_empty_async(ehci); + unlink_empty_async_suspended(ehci); ehci_handle_intr_unlinks(ehci); end_free_itds(ehci); Index: 3.8/drivers/usb/host/ehci-q.c =================================================================== --- 3.8.orig/drivers/usb/host/ehci-q.c +++ 3.8/drivers/usb/host/ehci-q.c @@ -1316,6 +1316,19 @@ static void unlink_empty_async(struct eh } } +/* The root hub is suspended; unlink all the async QHs */ +static void unlink_empty_async_suspended(struct ehci_hcd *ehci) +{ + struct ehci_qh *qh; + + while (ehci->async->qh_next.qh) { + qh = ehci->async->qh_next.qh; + WARN_ON(!list_empty(&qh->qtd_list)); + single_unlink_async(ehci, qh); + } + start_iaa_cycle(ehci, false); +} + /* makes sure the async qh will become idle */ /* caller must own ehci->lock */ -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html