RE: ehci scan_periodic loop time

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

 



Dears,

Excuse me!
I am new in linux ehci, so I do not have a lot of ideas for ehci issues.
After I trace ehci code, I found scan_periodic() take a lot of time for
loops. When I goole the solution for watchdog reset issue. I found the patch
from you. Then I apply that for my platform. But I do not get fully
understand in scan_periodic(). 
Could you give me the hints about the meaning of your patch below?
Even briefly for the flow such that I can trace in depth. I really
appreciate your idea.
BTW. I have test for 2 days(48 hours). No any issues for webcamtest if I
ignore the line I mentioned. I do not understand why it will not work if the
line is ignored as your comment.

Thanks!
Best Regards,
Brad

-----Original Message-----
From: linux-usb-owner@xxxxxxxxxxxxxxx
[mailto:linux-usb-owner@xxxxxxxxxxxxxxx] On Behalf Of Alan Stern
Sent: Saturday, March 26, 2011 1:01 AM
To: BradHuang
Cc: USB list
Subject: RE: ehci scan_periodic loop time

On Fri, 25 Mar 2011, BradHuang wrote:

> Dears,
> 
> 
> the patch you provide: but the one line does not patch for mine: 
> do you have any idea about any side effect if I ignore the line?

> =====================================================
> 
> 
> I have an experimental patch, below.  It hasn't been tested.  Let me 
> know what happens when you try it.
> Alan Stern
> Index: usb-2.6/drivers/usb/host/ehci.h
> ===================================================================
> --- usb-2.6.orig/drivers/usb/host/ehci.h
> +++ usb-2.6/drivers/usb/host/ehci.h
> @@ -117,6 +117,7 @@ struct ehci_hcd {   /* one per controlle
>   struct timer_list watchdog;
>   unsigned long  actions;
>   unsigned  stamp;
> + unsigned  periodic_stamp;
>   unsigned  random_frame;
>   unsigned long  next_statechange;
>   ktime_t   last_periodic_enable;
> Index: usb-2.6/drivers/usb/host/ehci-q.c
> ===================================================================
> --- usb-2.6.orig/drivers/usb/host/ehci-q.c
> +++ usb-2.6/drivers/usb/host/ehci-q.c
> @@ -838,6 +838,7 @@ qh_make (
>      is_input, 0,
>      hb_mult(maxp) * max_packet(maxp)));
>    qh->start = NO_FRAME;
> +  qh->stamp = ehci->periodic_stamp;
>  
>    if (urb->dev->speed == USB_SPEED_HIGH) {
>     qh->c_usecs = 0;
> Index: usb-2.6/drivers/usb/host/ehci-sched.c
> ===================================================================
> --- usb-2.6.orig/drivers/usb/host/ehci-sched.c
> +++ usb-2.6/drivers/usb/host/ehci-sched.c
> @@ -2261,6 +2261,7 @@ scan_periodic (struct ehci_hcd *ehci)
>   }
>   clock &= mod - 1;
>   clock_frame = clock >> 3;
> + ++ehci->periodic_stamp;
>  
>   for (;;) {
>    union ehci_shadow q, *q_p;
> @@ -2289,10 +2290,14 @@ restart:
>      temp.qh = qh_get (q.qh);
>      type = Q_NEXT_TYPE(ehci, q.qh->hw->hw_next);
>      q = q.qh->qh_next;
> -    modified = qh_completions (ehci, temp.qh);
> -    if (unlikely(list_empty(&temp.qh->qtd_list) ||
> -      temp.qh->needs_rescan))
> -     intr_deschedule (ehci, temp.qh);
> +    if (temp.qh->stamp != ehci->periodic_stamp) {
> +     modified = qh_completions(ehci, temp.qh);
> +     if (!modified)
> +      temp.qh->stamp = ehci->periodic_stamp;
> +     if (unlikely(list_empty(&temp.qh->qtd_list) ||
> +       temp.qh->needs_rescan))
> +      intr_deschedule(ehci, temp.qh);
> +    }
>      qh_put (temp.qh);
>      break;
>     case Q_TYPE_FSTN:
> @@ -2427,6 +2432,7 @@ restart:
>      free_cached_lists(ehci);
>      ehci->clock_frame = clock_frame;
>     }
> +   ++ehci->periodic_stamp;        -------------------> this line does not
applied
>    } else {
>     now_uframe++;
>     now_uframe &= mod - 1;

The patch won't work without that line.  However, you can always edit 
the file by hand and put the line in yourself.

Alan Stern

--
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

--
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