Commit 41f05ded authored by Ming Lei's avatar Ming Lei Committed by Greg Kroah-Hartman

usb: ehci: remove the 1st wmb in qh_append_tds

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: default avatarAlan Stern <stern@rowland.harvard.edu>
Signed-off-by: default avatarMing Lei <tom.leiming@gmail.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent fcda37cb
...@@ -1056,7 +1056,7 @@ static struct ehci_qh *qh_append_tds ( ...@@ -1056,7 +1056,7 @@ static struct ehci_qh *qh_append_tds (
*/ */
token = qtd->hw_token; token = qtd->hw_token;
qtd->hw_token = HALT_BIT(ehci); qtd->hw_token = HALT_BIT(ehci);
wmb ();
dummy = qh->dummy; dummy = qh->dummy;
dma = dummy->qtd_dma; dma = dummy->qtd_dma;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment