Am Donnerstag, den 23.03.2017, 16:39 +0800 schrieb pierre Kuo: Hi, > for sitd_link and itd_link, put wmb after the last memory access to make > sure ehci->period[frame] is visible by host before scheduling the > descriptors Please explain what the problem you are trying to fix is. > Signed-off-by: pierre Kuo <vichy.kuo@xxxxxxxxx> > --- > drivers/usb/host/ehci-sched.c | 6 ++++-- > 1 file changed, 4 insertions(+), 2 deletions(-) > > diff --git a/drivers/usb/host/ehci-sched.c b/drivers/usb/host/ehci-sched.c > index 980a6b3..11b517c 100644 > --- a/drivers/usb/host/ehci-sched.c > +++ b/drivers/usb/host/ehci-sched.c > @@ -1754,8 +1754,9 @@ static void reserve_release_iso_bandwidth(struct ehci_hcd *ehci, > itd->hw_next = *hw_p; > prev->itd = itd; > itd->frame = frame; > - wmb(); This looks very wrong. You need to make sure that a data structure is written to RAM before you announce it to the hardware. The code before the wmb() initializes a structure and the write after it announces it to the hardware. This wmb() is exactly where it needs to be. > *hw_p = cpu_to_hc32(ehci, itd->itd_dma | Q_TYPE_ITD); > + /* make sure host see periodic frame change before scheduling */ > + wmb(); If you need to flush something, wmb() is the wrong primitive. It merely ensures ordering. It is not guaranteed to flush writes to RAM. Regards Oliver -- 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