drm/msm: skip re-emitting IBs for unusable VMs
authorAntonino Maniscalco <antomani103@gmail.com>
Wed, 13 Aug 2025 13:04:44 +0000 (15:04 +0200)
committerRob Clark <robin.clark@oss.qualcomm.com>
Mon, 18 Aug 2025 14:51:10 +0000 (07:51 -0700)
When a VM is marked as an usuable we disallow new submissions from it,
however submissions that where already scheduled on the ring would still
be re-sent.

Since this can lead to further hangs, avoid emitting the actual IBs.

Fixes: 6a4d287a1ae6 ("drm/msm: Mark VM as unusable on GPU hangs")
Signed-off-by: Antonino Maniscalco <antomani103@gmail.com>
Reviewed-by: Akhil P Oommen <akhilpo@oss.qualcomm.com>
Patchwork: https://patchwork.freedesktop.org/patch/668314/
Signed-off-by: Rob Clark <robin.clark@oss.qualcomm.com>
drivers/gpu/drm/msm/msm_gpu.c

index 416d47185ef09e24778ed7ea3a8c48faaeb3822d..26c5ce897cbbdc792f965a1a7a7e34a01ed82960 100644 (file)
@@ -558,8 +558,15 @@ static void recover_worker(struct kthread_work *work)
                        unsigned long flags;
 
                        spin_lock_irqsave(&ring->submit_lock, flags);
-                       list_for_each_entry(submit, &ring->submits, node)
+                       list_for_each_entry(submit, &ring->submits, node) {
+                               /*
+                                * If the submit uses an unusable vm make sure
+                                * we don't actually run it
+                                */
+                               if (to_msm_vm(submit->vm)->unusable)
+                                       submit->nr_cmds = 0;
                                gpu->funcs->submit(gpu, submit);
+                       }
                        spin_unlock_irqrestore(&ring->submit_lock, flags);
                }
        }