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