misc: fastrpc: make sure memory read and writes are visible
authorSrinivas Kandagatla <srinivas.kandagatla@linaro.org>
Thu, 7 Mar 2019 10:12:24 +0000 (10:12 +0000)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 27 Mar 2019 17:09:57 +0000 (02:09 +0900)
dma_alloc_coherent buffers could have writes queued in store buffers so
commit them before sending buffer to DSP using correct dma barriers.
Same with vice-versa.

Fixes: c68cfb718c8f ("misc: fastrpc: Add support for context Invoke method")
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/misc/fastrpc.c

index ecb5664..986c9ae 100644 (file)
@@ -792,6 +792,9 @@ static int fastrpc_internal_invoke(struct fastrpc_user *fl,  u32 kernel,
                if (err)
                        goto bail;
        }
+
+       /* make sure that all CPU memory writes are seen by DSP */
+       dma_wmb();
        /* Send invoke buffer to remote dsp */
        err = fastrpc_invoke_send(fl->sctx, ctx, kernel, handle);
        if (err)
@@ -808,6 +811,8 @@ static int fastrpc_internal_invoke(struct fastrpc_user *fl,  u32 kernel,
                goto bail;
 
        if (ctx->nscalars) {
+               /* make sure that all memory writes by DSP are seen by CPU */
+               dma_rmb();
                /* populate all the output buffers with results */
                err = fastrpc_put_args(ctx, kernel);
                if (err)