[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