On Sat, 30 Oct 2010, Gavin Guo wrote: > >> 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 > > > > No, it is not possible. > > > >> (hc encounter queue head of which H=1 and scan_async havent's > >> unlink the queue head). > > > > Only one QH, ehci->async, ever has H set to 1. It is never removed > > from the async schedule. > > I means when hc encounter QH, ehci->async, has H set to 1. HC stop > traversing the qh list (HC disable CMD_ASE & CMD_RUN??). No. The host controller never disables CMD_ASE or CMD_RUN, except when an error occurs. > And ehci_work > havent't call at this time before ehci_urb_enqueue is comming(those > QHs which is completed haven't deleted by scan_async called by > ehci_work). At this time when ehci_urb_enqueue is execute, there are > some undeleted QHs existing in the QH link list pointed by > asynclistaddr register. Then qh_link_async want to add a new qh to > link list, doesn't it need to restart the CMD_ASE & CMD_RUN for > non-empty link list condition?? No, because CMD_ASE and CMD_RUN are still set. > Does the condition that HC stop traversing the QH link list due to H=1 > QH is met will result in CMD_ASE & CMD_RUN disabled ?? No. See section 4.8.3 in the EHCI spec; when this happens the controller "simply stops traversal of the asynchronous schedule". It doesn't change any register bits. > if doesn't, where is the point?? The point is to reduce the amount of PCI and memory bandwidth consumed by the controller when it doesn't have any work to do. > and how HC will be restarted after stopping?? Read section 4.8.4. > Maybe my concept is wrong at this point. Yes, your understanding is wrong. 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