From 45d6b311ac76fab32ff729ded544626d2a211405 Mon Sep 17 00:00:00 2001 From: Alan Stern Date: Fri, 22 Mar 2013 13:31:29 -0400 Subject: [PATCH] --- yaml --- r: 364375 b: refs/heads/master c: 7655e3160c78a18c2ecf7bf4dee0bbfe58575c7f h: refs/heads/master i: 364373: 4d0687af96319b33791a02612089966ea70c104f 364371: 3d4f4c51a9639cf73851fd1a70ec1fc693b9b9b9 364367: 77d6701937c3829425dd6352fa19b687f2c300f8 v: v3 --- [refs] | 2 +- trunk/drivers/usb/host/ehci-hcd.c | 48 +++++++------------------------ 2 files changed, 12 insertions(+), 38 deletions(-) diff --git a/[refs] b/[refs] index b7d23d1ed1fb..2f7dae5072d7 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 7bc782d73c7db042ecc965866b8c1c2b7d6e93d6 +refs/heads/master: 7655e3160c78a18c2ecf7bf4dee0bbfe58575c7f diff --git a/trunk/drivers/usb/host/ehci-hcd.c b/trunk/drivers/usb/host/ehci-hcd.c index 93f4cd75845e..87fe3daaa092 100644 --- a/trunk/drivers/usb/host/ehci-hcd.c +++ b/trunk/drivers/usb/host/ehci-hcd.c @@ -896,17 +896,21 @@ static int ehci_urb_dequeue(struct usb_hcd *hcd, struct urb *urb, int status) if (rc) goto done; - switch (usb_pipetype (urb->pipe)) { - // case PIPE_CONTROL: - // case PIPE_BULK: - default: + if (usb_pipetype(urb->pipe) == PIPE_ISOCHRONOUS) { + /* + * We don't expedite dequeue for isochronous URBs. + * Just wait until they complete normally or their + * time slot expires. + */ + } else { qh = (struct ehci_qh *) urb->hcpriv; - if (!qh) - break; qh->exception = 1; switch (qh->qh_state) { case QH_STATE_LINKED: - start_unlink_async(ehci, qh); + if (usb_pipetype(urb->pipe) == PIPE_INTERRUPT) + start_unlink_intr(ehci, qh); + else + start_unlink_async(ehci, qh); break; case QH_STATE_COMPLETING: qh->dequeue_during_giveback = 1; @@ -920,36 +924,6 @@ static int ehci_urb_dequeue(struct usb_hcd *hcd, struct urb *urb, int status) qh_completions(ehci, qh); break; } - break; - - case PIPE_INTERRUPT: - qh = (struct ehci_qh *) urb->hcpriv; - if (!qh) - break; - qh->exception = 1; - switch (qh->qh_state) { - case QH_STATE_LINKED: - start_unlink_intr(ehci, qh); - break; - case QH_STATE_COMPLETING: - qh->dequeue_during_giveback = 1; - break; - case QH_STATE_IDLE: - qh_completions (ehci, qh); - break; - default: - ehci_dbg (ehci, "bogus qh %p state %d\n", - qh, qh->qh_state); - goto done; - } - break; - - case PIPE_ISOCHRONOUS: - // itd or sitd ... - - // wait till next completion, do it then. - // completion irqs can wait up to 1024 msec, - break; } done: spin_unlock_irqrestore (&ehci->lock, flags);