]> git.baikalelectronics.ru Git - kernel.git/commitdiff
drm/etnaviv: put submit prev MMU context when it exists
authorLucas Stach <l.stach@pengutronix.de>
Fri, 20 Aug 2021 20:18:24 +0000 (22:18 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 22 Sep 2021 10:26:39 +0000 (12:26 +0200)
commit cda7532916f7bc860b36a1806cb8352e6f63dacb upstream.

The prev context is the MMU context at the time of the job
queueing in hardware. As a job might be queued multiple times
due to recovery after a GPU hang, we need to make sure to put
the stale prev MMU context from a prior queuing, to avoid the
reference and thus the MMU context leaking.

Cc: stable@vger.kernel.org # 5.4
Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
Tested-by: Michael Walle <michael@walle.cc>
Tested-by: Marek Vasut <marex@denx.de>
Reviewed-by: Christian Gmeiner <christian.gmeiner@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/gpu/drm/etnaviv/etnaviv_gpu.c

index 0fa4885f9c183c3d9b065b1d9abaeeab7e50d6b2..fc90ea6973b2d1eb774d30cbc29b3d9599a6a5af 100644 (file)
@@ -1310,6 +1310,8 @@ struct dma_fence *etnaviv_gpu_submit(struct etnaviv_gem_submit *submit)
                gpu->mmu_context = etnaviv_iommu_context_get(submit->mmu_context);
                etnaviv_gpu_start_fe_idleloop(gpu);
        } else {
+               if (submit->prev_mmu_context)
+                       etnaviv_iommu_context_put(submit->prev_mmu_context);
                submit->prev_mmu_context = etnaviv_iommu_context_get(gpu->mmu_context);
        }