
Adds latest 6.6 patches from the Raspberry Pi repository. These patches were generated from: https://github.com/raspberrypi/linux/commits/rpi-6.6.y/ With the following command: git format-patch -N v6.6.83..HEAD (HEAD -> 08d4e8f52256bd422d8a1f876411603f627d0a82) Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com> (cherry picked from commit 251f76c1c67d62c585d799c38dab31e1385d2ad5)
62 lines
2.2 KiB
Diff
62 lines
2.2 KiB
Diff
From 5258ca4ad089548a72657522443b9c3e46fd125b Mon Sep 17 00:00:00 2001
|
||
From: =?UTF-8?q?Ma=C3=ADra=20Canal?= <mcanal@igalia.com>
|
||
Date: Sat, 22 Feb 2025 14:40:21 -0300
|
||
Subject: [PATCH] drm/v3d: Don't run jobs that have errors flagged in its fence
|
||
MIME-Version: 1.0
|
||
Content-Type: text/plain; charset=UTF-8
|
||
Content-Transfer-Encoding: 8bit
|
||
|
||
The V3D driver still relies on `drm_sched_increase_karma()` and
|
||
`drm_sched_resubmit_jobs()` for resubmissions when a timeout occurs.
|
||
The function `drm_sched_increase_karma()` marks the job as guilty, while
|
||
`drm_sched_resubmit_jobs()` sets an error (-ECANCELED) in the DMA fence of
|
||
that guilty job.
|
||
|
||
Because of this, we must check whether the job’s DMA fence has been
|
||
flagged with an error before executing the job. Otherwise, the same guilty
|
||
job may be resubmitted indefinitely, causing repeated GPU resets.
|
||
|
||
This patch adds a check for an error on the job's fence to prevent running
|
||
a guilty job that was previously flagged when the GPU timed out.
|
||
|
||
Note that the CPU and CACHE_CLEAN queues do not require this check, as
|
||
their jobs are executed synchronously once the DRM scheduler starts them.
|
||
|
||
Cc: stable@vger.kernel.org
|
||
Fixes: d223f98f0209 ("drm/v3d: Add support for compute shader dispatch.")
|
||
Fixes: 1584f16ca96e ("drm/v3d: Add support for submitting jobs to the TFU.")
|
||
Signed-off-by: Maíra Canal <mcanal@igalia.com>
|
||
---
|
||
drivers/gpu/drm/v3d/v3d_sched.c | 9 ++++++++-
|
||
1 file changed, 8 insertions(+), 1 deletion(-)
|
||
|
||
--- a/drivers/gpu/drm/v3d/v3d_sched.c
|
||
+++ b/drivers/gpu/drm/v3d/v3d_sched.c
|
||
@@ -292,11 +292,15 @@ v3d_tfu_job_run(struct drm_sched_job *sc
|
||
struct drm_device *dev = &v3d->drm;
|
||
struct dma_fence *fence;
|
||
|
||
+ if (unlikely(job->base.base.s_fence->finished.error))
|
||
+ return NULL;
|
||
+
|
||
+ v3d->tfu_job = job;
|
||
+
|
||
fence = v3d_fence_create(v3d, V3D_TFU);
|
||
if (IS_ERR(fence))
|
||
return NULL;
|
||
|
||
- v3d->tfu_job = job;
|
||
if (job->base.irq_fence)
|
||
dma_fence_put(job->base.irq_fence);
|
||
job->base.irq_fence = dma_fence_get(fence);
|
||
@@ -333,6 +337,9 @@ v3d_csd_job_run(struct drm_sched_job *sc
|
||
struct dma_fence *fence;
|
||
int i, csd_cfg0_reg, csd_cfg_reg_count;
|
||
|
||
+ if (unlikely(job->base.base.s_fence->finished.error))
|
||
+ return NULL;
|
||
+
|
||
v3d->csd_job = job;
|
||
|
||
v3d_invalidate_caches(v3d);
|