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: Alan Stern <stern@rowland.harvard.edu> Signed-off-by: Ming Lei <tom.leiming@gmail.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
parent
fcda37cb42
commit
41f05dedea
1 changed files with 1 additions and 1 deletions
|
@ -1056,7 +1056,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;
|
||||
|
|
Reference in a new issue