|
@@ -981,10 +981,6 @@ rescan_all:
|
|
|
int completed, modified;
|
|
|
__hc32 *prev;
|
|
|
|
|
|
- /* Is this ED already invisible to the hardware? */
|
|
|
- if (ed->state == ED_IDLE)
|
|
|
- goto ed_idle;
|
|
|
-
|
|
|
/* only take off EDs that the HC isn't using, accounting for
|
|
|
* frame counter wraps and EDs with partially retired TDs
|
|
|
*/
|
|
@@ -1012,12 +1008,10 @@ skip_ed:
|
|
|
}
|
|
|
|
|
|
/* ED's now officially unlinked, hc doesn't see */
|
|
|
- ed->state = ED_IDLE;
|
|
|
ed->hwHeadP &= ~cpu_to_hc32(ohci, ED_H);
|
|
|
ed->hwNextED = 0;
|
|
|
wmb();
|
|
|
ed->hwINFO &= ~cpu_to_hc32(ohci, ED_SKIP | ED_DEQUEUE);
|
|
|
-ed_idle:
|
|
|
|
|
|
/* reentrancy: if we drop the schedule lock, someone might
|
|
|
* have modified this list. normally it's just prepending
|
|
@@ -1088,6 +1082,7 @@ rescan_this:
|
|
|
if (list_empty(&ed->td_list)) {
|
|
|
*last = ed->ed_next;
|
|
|
ed->ed_next = NULL;
|
|
|
+ ed->state = ED_IDLE;
|
|
|
list_del(&ed->in_use_list);
|
|
|
} else if (ohci->rh_state == OHCI_RH_RUNNING) {
|
|
|
*last = ed->ed_next;
|