Commit 08fdfd26 authored by Shuicheng Lin's avatar Shuicheng Lin Committed by Lucas De Marchi
Browse files

drm/xe/hw_engine_group: Fix double write lock release in error path



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: 770bd1d3 ("drm/xe/hw_engine_group: Ensure safe transition between execution modes")
Cc: Francois Dugast <francois.dugast@intel.com>
Signed-off-by: default avatarShuicheng Lin <shuicheng.lin@intel.com>
Reviewed-by: default avatarFrancois Dugast <francois.dugast@intel.com>
Link: https://lore.kernel.org/r/20250925023145.1203004-2-shuicheng.lin@intel.com


Signed-off-by: default avatarLucas De Marchi <lucas.demarchi@intel.com>
(cherry picked from commit 662d98b8)
Signed-off-by: default avatarLucas De Marchi <lucas.demarchi@intel.com>
parent 2d1684a0
Loading
Loading
Loading
Loading
+1 −5
Original line number Diff line number Diff line
@@ -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;
}

/**