|
@@ -1063,10 +1063,11 @@ rescan:
|
|
|
tmp && tmp != qh;
|
|
|
tmp = tmp->qh_next.qh)
|
|
|
continue;
|
|
|
- /* periodic qh self-unlinks on empty */
|
|
|
- if (!tmp)
|
|
|
- goto nogood;
|
|
|
- unlink_async (ehci, qh);
|
|
|
+ /* periodic qh self-unlinks on empty, and a COMPLETING qh
|
|
|
+ * may already be unlinked.
|
|
|
+ */
|
|
|
+ if (tmp)
|
|
|
+ unlink_async(ehci, qh);
|
|
|
/* FALL THROUGH */
|
|
|
case QH_STATE_UNLINK: /* wait for hw to finish? */
|
|
|
case QH_STATE_UNLINK_WAIT:
|
|
@@ -1083,7 +1084,6 @@ idle_timeout:
|
|
|
}
|
|
|
/* else FALL THROUGH */
|
|
|
default:
|
|
|
-nogood:
|
|
|
/* caller was supposed to have unlinked any requests;
|
|
|
* that's not our job. just leak this memory.
|
|
|
*/
|