On Sun, 2 Jan 2011, vichy wrote: > after studying the source again, I guess when timeout happen, the > ehci_urb_done is called by end_unlink_async to screen out the previous > commands. By way of qh_completions. That's right. > Why I ask this question is I found something abnormal > I purposely dump the the token of the qtd in timeout urb under > qh_completions and it shows: > (I set a bit when driver fail on wait_for_completion_timeout, and > check this bit in qh_completions) > > urb 84718200 toke 0x80000e00 > ehci -ehci.0: ehci_urb_done 1 urb 84718200 ep0out status -150 len 0/0 > usb 2-1: ifconfig timed out on ep0out len=0/0 Do you know which qtd this is? A control transfer uses 3 qtds. > The active bit is 0, and if I remember correctly this bit should be > already set in qh_urb_transaction. Yes. But it isn't set in the dummy qtd. > Meanwhile, I also add message as below: > wmb (); > dummy->hw_token = token; > if(token != dummy->hw_token) > printk("Not identy token=0x%x, dummy->hw_token=0x%x\n",token, > dummy->hw_token); > but i didn't see it in the log. > > I also grep the source and I didn't find any place to clear this bit. No, the hardware clears it automatically. > Did I miss anything or I need to do more experiments? Maybe. Have you seen this email? http://marc.info/?l=linux-mips&m=129397158114595&w=2 People have been using USB on MIPS for a long time. Why do you think you're seeing problems now? 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