]> www.infradead.org Git - users/hch/misc.git/commitdiff
drm/xe/hw_engine_group: Fix double write lock release in error path
authorShuicheng Lin <shuicheng.lin@intel.com>
Thu, 25 Sep 2025 02:31:46 +0000 (02:31 +0000)
committerLucas De Marchi <lucas.demarchi@intel.com>
Fri, 3 Oct 2025 19:17:00 +0000 (14:17 -0500)
In xe_hw_engine_group_get_mode(), a write lock is acquired before
calling switch_mode(), which in turn invokes
xe_hw_engine_group_suspend_faulting_lr_jobs().

On failure inside xe_hw_engine_group_suspend_faulting_lr_jobs(),
the write lock is released there, and then again in
xe_hw_engine_group_get_mode(), leading to a double release.

Fix this by keeping both acquire and release operation in
xe_hw_engine_group_get_mode().

Fixes: 770bd1d34113 ("drm/xe/hw_engine_group: Ensure safe transition between execution modes")
Cc: Francois Dugast <francois.dugast@intel.com>
Signed-off-by: Shuicheng Lin <shuicheng.lin@intel.com>
Reviewed-by: Francois Dugast <francois.dugast@intel.com>
Link: https://lore.kernel.org/r/20250925023145.1203004-2-shuicheng.lin@intel.com
Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
(cherry picked from commit 662d98b8b373007fa1b08ba93fee11f6fd3e387c)
Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
drivers/gpu/drm/xe/xe_hw_engine_group.c

index 58bee3ffe881ada1e20178a4752fe37a2f24fc85..fa4db5f23342983e042e96f3ce760aaf0dfc15a3 100644 (file)
@@ -213,17 +213,13 @@ static int xe_hw_engine_group_suspend_faulting_lr_jobs(struct xe_hw_engine_group
 
                err = q->ops->suspend_wait(q);
                if (err)
-                       goto err_suspend;
+                       return err;
        }
 
        if (need_resume)
                xe_hw_engine_group_resume_faulting_lr_jobs(group);
 
        return 0;
-
-err_suspend:
-       up_write(&group->mode_sem);
-       return err;
 }
 
 /**