]> git.ipfire.org Git - thirdparty/kernel/stable.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)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 13 Nov 2025 20:37:39 +0000 (15:37 -0500)
[ Upstream commit 7574f30337e19045f03126b4c51f525b84e5049e ]

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>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/gpu/drm/amd/amdkfd/kfd_svm.c

index cecdbcea0bb900db72115bd6d67c8a8bc258c964..827507cfed7aab6886a39bfd7d7b70cc3bdb6ba2 100644 (file)
@@ -3046,6 +3046,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 {