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....@gmail.com>
> ---
>  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 majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to