Hi all, The following code in qh_link_async: if (!head->qh_next.qh) { u32 cmd = ehci_readl(ehci, &ehci->regs->command); if (!(cmd & CMD_ASE)) { /* in case a clear of CMD_ASE didn't take yet */ (void)handshake(ehci, &ehci->regs->status, STS_ASS, 0, 150); cmd |= CMD_ASE | CMD_RUN; ehci_writel(ehci, cmd, &ehci->regs->command); ehci_to_hcd(ehci)->state = HC_STATE_RUNNING; /* posted write need not be known to HC yet ... */ } } Why only the null queue head is checked? I think it is possible that non-empty queue head link list also have asynchronous list disabled (hc encounter queue head of which H=1 and scan_async havent's unlink the queue head). If the non-empty queue head list condition is met, and qh_link_async add new queue head directly without enable CMD_ASE & CMD_RUN. The host controller will not go ahead to process the new queue head?? or if it's possible that hc could enable CMD_ASE & CMD_RUN in other place ?? Could someone please tell me how this work ?? Regards, Gavin Guo -- 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