Re: [PATCH] USB: EHCI: fix regression related to qh_refresh()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, May 29, 2013 at 11:33 PM, Alan Stern <stern@xxxxxxxxxxxxxxxxxxx> wrote:
> This patch adds some code that inadvertently got left out of commit
> c1fdb68e3d73741630ca16695cf9176c233be7ed (USB: EHCI: changes related
> to qh_refresh()).  The calls to qh_refresh() and qh_link_periodic()
> were taken out of qh_schedule(); therefore it is necessary to call
> these routines manually after calling qh_schedule().
>
> Signed-off-by: Alan Stern <stern@xxxxxxxxxxxxxxxxxxx>
> Reported-and-tested-by: Oleksij Rempel <linux@xxxxxxxxxxxxxxxx>
>
> ---
>
> Of course, this needs to get into 3.10.
>
>
> [as1687]
>
>  drivers/usb/host/ehci-sched.c |    7 ++++++-
>  1 file changed, 6 insertions(+), 1 deletion(-)
>
> Index: usb-3.9/drivers/usb/host/ehci-sched.c
> ===================================================================
> --- usb-3.9.orig/drivers/usb/host/ehci-sched.c
> +++ usb-3.9/drivers/usb/host/ehci-sched.c
> @@ -646,6 +646,10 @@ static void end_unlink_intr(struct ehci_
>         /* reschedule QH iff another request is queued */
>         if (!list_empty(&qh->qtd_list) && ehci->rh_state == EHCI_RH_RUNNING) {
>                 rc = qh_schedule(ehci, qh);
> +               if (rc == 0) {
> +                       qh_refresh(ehci, qh);
> +                       qh_link_periodic(ehci, qh);
> +               }

If one URB is just submitted during end_unlink_intr(), the qh may be scheduled
and linked twice since intr_submit() has seen idle state of the qh already.

I guess one interrupt URB is just submitted after starting unlink and before
end unlinking on Oleksij's problem, this patch can addresses the problem
but might cause issues on above case.

Looks one easy fix might be updating qh as idle after calling qh_completions().

Thanks,
-- 
Ming Lei
--
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




[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux