diff options
| author | Sunil Khatri <sunil.khatri@amd.com> | 2026-09-08 14:47:29 +0530 |
|---|---|---|
| committer | Christian König <christian.koenig@amd.com> | 2026-09-08 17:31:24 +0200 |
| commit | 159720704d9d652b64390c11fb971e15b0a78d23 (patch) | |
| tree | c7185293ed26148cb2ab39b85287569514c9f2df /scripts/Makefile.thinlto | |
| parent | f97802dd98b27e45c04293f9926f07642578b23f (diff) | |
| download | linux-159720704d9d652b64390c11fb971e15b0a78d23.tar.gz linux-159720704d9d652b64390c11fb971e15b0a78d23.zip | |
drm/drm_exec: fix up contended obj when num_objects is 0
drm_exec_prepare_array() silently returns success without calling
drm_exec_lock_contended() when num_objects is zero. This breaks the
invariant upheld by drm_exec_lock_obj(), where every entry point into
the locking sequence must first attempt to lock any previously
contended object before proceeding.
Drivers that chain multiple drm_exec_prepare_array() calls per
drm_exec_until_all_locked() iteration (e.g. amdgpu's userq signal/wait
ioctls, which prepare separate read and write BO arrays) can pass an
empty array for one of the two calls. If contention is hit while
preparing the non-empty array, exec->contended is set and the loop
retries; on retry, the empty-array call preceding it is a no-op that
never clears exec->contended, so drm_exec_retry_on_contention()
immediately jumps back to the top of the loop without ever reaching
the call that would resolve the contention. This spins forever.
Fix it by having drm_exec_prepare_array() call drm_exec_lock_contended()
directly when num_objects is zero, so a pending contended object dont
loop infinitely.
Fixes: 09593216bff1 ("drm: execution context for GEM buffers v7")
CC: stable@vger.kernel.org # v6.6+
Signed-off-by: Sunil Khatri <sunil.khatri@amd.com>
Link: https://lore.kernel.org/r/20260908091729.2749399-1-sunil.khatri@amd.com
Reviewed-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Christian König <christian.koenig@amd.com>
Diffstat (limited to 'scripts/Makefile.thinlto')
0 files changed, 0 insertions, 0 deletions
