On Mon, 5 Sep 2011 tom.leiming@xxxxxxxxx wrote: > From: Ming Lei <tom.leiming@xxxxxxxxx> > > According to ehci spec 4.10.2, Advance Queue > > If the fetched qTD has its Active bit set to a zero, the > host controller aborts the queue advance and follows the > queue head's horizontal pointer to the next schedule data > structure. > > the 'qtd' will be linked into qh hardware queue after the line > below > > *dummy = *qtd; > > is executed and observed by EHCI HC, but EHCI HC won't have chance to > fetch the qtd descriptor pointed by 'qtd' in qh_append_tds until the > line below > > dummy->hw_token = token; #set Active bit here > > is executed by CPU and observed by EHCI HC. > > There is already one 'wmb' to order writing to 'dummy'/'qtd' descriptors > and writing 'token' to 'dummy' descriptor(set Active bit), so the 1st > wmb is not needed and can be removed. > > Signed-off-by: Alan Stern <stern@xxxxxxxxxxxxxxxxxxx> > Signed-off-by: Ming Lei <tom.leiming@xxxxxxxxx> > --- > drivers/usb/host/ehci-q.c | 2 +- > 1 files changed, 1 insertions(+), 1 deletions(-) > > diff --git a/drivers/usb/host/ehci-q.c b/drivers/usb/host/ehci-q.c > index 5996ad5..00443d2 100644 > --- a/drivers/usb/host/ehci-q.c > +++ b/drivers/usb/host/ehci-q.c > @@ -1057,7 +1057,7 @@ static struct ehci_qh *qh_append_tds ( > */ > token = qtd->hw_token; > qtd->hw_token = HALT_BIT(ehci); > - wmb (); > + > dummy = qh->dummy; > > dma = dummy->qtd_dma; Signed-off-by: Alan Stern <stern@xxxxxxxxxxxxxxxxxxx> -- 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