[PATCH 1/6] etnaviv: always do cpu_fini in transfer_unmap

Wladimir J. van der Laan laanwj at gmail.com
Wed May 31 16:55:34 UTC 2017


On Fri, May 19, 2017 at 11:41:07AM +0200, Lucas Stach wrote:
> The cpu_fini() call pushes the buffer back into the GPU domain, which needs
> to be done for all buffers, not just the ones with CPU written content. The
> etnaviv kernel driver currently doesn't validate this, but may start to do
> so at a later point in time. If there is a temporary resource the fini needs
> to happen before the RS uses this one as the source for the upload.
> 
> Also remove an invalid comment about flushing CPU caches, cpu_fini takes
> care of everything involved in this.

Reviewed-By: Wladimir J. van der Laan <laanwj at gmail.com>

> Fixes: c9e8b49b885 ("etnaviv: gallium driver for Vivante GPUs")
> Cc: mesa-stable at lists.freedesktop.org
> Signed-off-by: Lucas Stach <l.stach at pengutronix.de>
> ---
>  src/gallium/drivers/etnaviv/etnaviv_transfer.c | 9 ++++++---
>  1 file changed, 6 insertions(+), 3 deletions(-)
> 
> diff --git a/src/gallium/drivers/etnaviv/etnaviv_transfer.c b/src/gallium/drivers/etnaviv/etnaviv_transfer.c
> index 1a5aa7fc043c..4809b04ff95f 100644
> --- a/src/gallium/drivers/etnaviv/etnaviv_transfer.c
> +++ b/src/gallium/drivers/etnaviv/etnaviv_transfer.c
> @@ -70,6 +70,9 @@ etna_transfer_unmap(struct pipe_context *pctx, struct pipe_transfer *ptrans)
>     if (rsc->texture && !etna_resource_newer(rsc, etna_resource(rsc->texture)))
>        rsc = etna_resource(rsc->texture); /* switch to using the texture resource */
>  
> +   if (trans->rsc)
> +      etna_bo_cpu_fini(etna_resource(trans->rsc)->bo);
> +
>     if (ptrans->usage & PIPE_TRANSFER_WRITE) {
>        if (trans->rsc) {
>           /* We have a temporary resource due to either tile status or
> @@ -105,15 +108,15 @@ etna_transfer_unmap(struct pipe_context *pctx, struct pipe_transfer *ptrans)
>        }
>  
>        rsc->seqno++;
> -      etna_bo_cpu_fini(rsc->bo);
>  
>        if (rsc->base.bind & PIPE_BIND_SAMPLER_VIEW) {
> -         /* XXX do we need to flush the CPU cache too or start a write barrier
> -          * to make sure the GPU sees it? */
>           ctx->dirty |= ETNA_DIRTY_TEXTURE_CACHES;
>        }
>     }
>  
> +   if (!trans->rsc)
> +      etna_bo_cpu_fini(rsc->bo);
> +
>     pipe_resource_reference(&trans->rsc, NULL);
>     pipe_resource_reference(&ptrans->resource, NULL);
>     slab_free(&ctx->transfer_pool, trans);
> -- 
> 2.11.0
> 
> _______________________________________________
> etnaviv mailing list
> etnaviv at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/etnaviv


More information about the etnaviv mailing list