]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
drm/imagination: Skip check on paired job fence during job submission
authorAlessio Belle <alessio.belle@imgtec.com>
Mon, 30 Mar 2026 07:56:38 +0000 (08:56 +0100)
committerMatt Coster <matt.coster@imgtec.com>
Wed, 8 Apr 2026 10:17:13 +0000 (11:17 +0100)
While submitting a paired fragment job, there is no need to manually
look for, and skip, the paired job fence, as the existing logic to
resolve dependencies to pvr_queue_fence objects will have failed to
resolve it already and continued with the next one.

Point this out where the fence is actually accessed and drop the related
check.

Signed-off-by: Alessio Belle <alessio.belle@imgtec.com>
Reviewed-by: Brajesh Gupta <brajesh.gupta@imgtec.com>
Link: https://patch.msgid.link/20260330-job-submission-fixes-cleanup-v1-3-7de8c09cef8c@imgtec.com
Signed-off-by: Matt Coster <matt.coster@imgtec.com>
drivers/gpu/drm/imagination/pvr_queue.c

index f1e54e6d940dd5437c1fb27034afb0c1faf4b409..527eae1309d86e03cd1c18d3dccdc46000122747 100644 (file)
@@ -646,10 +646,6 @@ static void pvr_queue_submit_job_to_cccb(struct pvr_job *job)
                if (!jfence)
                        continue;
 
-               /* This fence will be placed last, as partial render fence. */
-               if (is_paired_job_fence(fence, job))
-                       continue;
-
                if (dma_fence_is_signaled(&jfence->base))
                        continue;
 
@@ -664,8 +660,13 @@ static void pvr_queue_submit_job_to_cccb(struct pvr_job *job)
                }
        }
 
-       /* Partial render fence goes last. */
        if (job->type == DRM_PVR_JOB_TYPE_FRAGMENT && job->paired_job) {
+               /*
+                * The loop above will only process dependencies backed by a UFO i.e. with
+                * a valid parent fence assigned, but the paired job dependency won't have
+                * one until both jobs have been submitted. Access the parent fence directly
+                * here instead, submitting it last as partial render fence.
+                */
                jfence = to_pvr_queue_job_fence(job->paired_job->done_fence);
                if (!WARN_ON(!jfence)) {
                        pvr_fw_object_get_fw_addr(jfence->queue->timeline_ufo.fw_obj,