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

Lucas Stach l.stach at pengutronix.de
Tue May 30 13:39:51 UTC 2017


Can someone please take a look at this one patch at least? I'm fine with
the rest of the series waiting a bit longer, but I would like to push
this bugfix patch in the next few days.

Thanks,
Lucas

Am Freitag, den 19.05.2017, 11:41 +0200 schrieb Lucas Stach:
> 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.
> 
> 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);




More information about the etnaviv mailing list