]> www.infradead.org Git - users/hch/misc.git/commitdiff
drm/amdkfd: Fix mmap write lock not release
authorPhilip Yang <Philip.Yang@amd.com>
Mon, 15 Sep 2025 19:57:32 +0000 (15:57 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Tue, 7 Oct 2025 18:09:06 +0000 (14:09 -0400)
If mmap write lock is taken while draining retry fault, mmap write lock
is not released because svm_range_restore_pages calls mmap_read_unlock
then returns. This causes deadlock and system hangs later because mmap
read or write lock cannot be taken.

Downgrade mmap write lock to read lock if draining retry fault fix this
bug.

Signed-off-by: Philip Yang <Philip.Yang@amd.com>
Reviewed-by: Harish Kasiviswanathan <Harish.Kasiviswanathan@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdkfd/kfd_svm.c

index 273f42e3afddf0816b60a8a7b7c5439d1ee8d800..9d72411c33791f95c9a1e22242da2dc86307a3f4 100644 (file)
@@ -3045,6 +3045,8 @@ retry_write_locked:
        if (svms->checkpoint_ts[gpuidx] != 0) {
                if (amdgpu_ih_ts_after_or_equal(ts,  svms->checkpoint_ts[gpuidx])) {
                        pr_debug("draining retry fault, drop fault 0x%llx\n", addr);
+                       if (write_locked)
+                               mmap_write_downgrade(mm);
                        r = -EAGAIN;
                        goto out_unlock_svms;
                } else {