Re: [PATCH v14 12/15] drm/panfrost: Skip cache flush/invalidate when enabling perfcnt
From: Steven Price
Date: Mon Oct 12 2026 - 07:30:31 EST
On 09/10/2026 13:33, Adrián Larumbe wrote:
> The GPU cache flush/invalidate operation is unnecessary. In the usual case,
> before a perfcnt dump is requested, there will be no stale lines in GPU
> caches for the sample BO's physmem pages, since their memory had not
> recently been addressed by the GPU.
>
> However, in the off-chance that the sample BO reuses memory that the GPU
> had recently addressed and for which it contains stale lines in its caches,
> there already was a FLUSH_PT command being issued as part of the buffer GPU
> mapping procedure, so by the time panfrost_gem_open() comes back at perfcnt
> session enable, stale GPU cache lines should've already been evicted.
>
> In either case, forcing a GPU cache clean when enabling a new session makes
> no difference, and removing it simplifies handling of the error path.
Thanks, that commit message explains what's going on and why it's safe.
Reviewed-by: Steven Price <steven.price@xxxxxxx>
>
> Reviewed-by: Boris Brezillon <boris.brezillon@xxxxxxxxxxxxx>
> Signed-off-by: Adrián Larumbe <adrian.larumbe@xxxxxxxxxxxxx>
> ---
> drivers/gpu/drm/panfrost/panfrost_perfcnt.c | 15 ++-------------
> 1 file changed, 2 insertions(+), 13 deletions(-)
>
> diff --git a/drivers/gpu/drm/panfrost/panfrost_perfcnt.c b/drivers/gpu/drm/panfrost/panfrost_perfcnt.c
> index f71534e741b6..ffc77121070e 100644
> --- a/drivers/gpu/drm/panfrost/panfrost_perfcnt.c
> +++ b/drivers/gpu/drm/panfrost/panfrost_perfcnt.c
> @@ -124,21 +124,10 @@ static int panfrost_perfcnt_enable_locked(struct panfrost_device *pfdev,
> panfrost_gem_internal_set_label(&bo->base, "Perfcnt sample buffer");
>
> /*
> - * Invalidate the cache and clear the counters to start from a fresh
> - * state.
> + * Clear the counters to start from a fresh state.
> */
> - reinit_completion(&pfdev->perfcnt->dump_comp);
> - gpu_write(pfdev, GPU_INT_CLEAR,
> - GPU_IRQ_CLEAN_CACHES_COMPLETED |
> - GPU_IRQ_PERFCNT_SAMPLE_COMPLETED);
> + gpu_write(pfdev, GPU_INT_CLEAR, GPU_IRQ_PERFCNT_SAMPLE_COMPLETED);
> gpu_write(pfdev, GPU_CMD, GPU_CMD_PERFCNT_CLEAR);
> - gpu_write(pfdev, GPU_CMD, GPU_CMD_CLEAN_INV_CACHES);
> - ret = wait_for_completion_timeout(&pfdev->perfcnt->dump_comp,
> - msecs_to_jiffies(1000));
> - if (!ret) {
> - ret = -ETIMEDOUT;
> - goto err_vunmap;
> - }
>
> ret = panfrost_mmu_as_get(pfdev, perfcnt->mapping->mmu);
> if (ret < 0)
>