]> www.infradead.org Git - users/jedix/linux-maple.git/commit
drm/amdgpu: Fix eviction fence worker race during fd close
authorJesse.Zhang <Jesse.Zhang@amd.com>
Thu, 15 May 2025 07:02:13 +0000 (15:02 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Thu, 22 May 2025 16:00:52 +0000 (12:00 -0400)
commit0132ba7ff0f613915d332a30fcf14cf66e317f98
tree359c181902e47e9cfb55572e3b75c0918b501ddc
parentb2c11e27080d8556664c20c30ca3527ffa99bec4
drm/amdgpu: Fix eviction fence worker race during fd close

The current cleanup order during file descriptor close can lead to
a race condition where the eviction fence worker attempts to access
a destroyed mutex from the user queue manager:

[  517.294055] DEBUG_LOCKS_WARN_ON(lock->magic != lock)
[  517.294060] WARNING: CPU: 8 PID: 2030 at kernel/locking/mutex.c:564
[  517.294094] Workqueue: events amdgpu_eviction_fence_suspend_worker [amdgpu]

The issue occurs because:
1. We destroy the user queue manager (including its mutex) first
2. Then try to destroy eviction fences which may have pending work
3. The eviction fence worker may try to access the already-destroyed mutex

Fix this by reordering the cleanup to:
1. First mark the fd as closing and destroy eviction fences,
   which flushes any pending work
2. Then safely destroy the user queue manager after we're certain
   no more fence work will be executed

The copy in amdgpu_driver_postclose_kms() needs to be removed (Christian)

Reviewed-by: Christian König <christian.koenig@amd.com>
Reviewed-by: Prike Liang <Prike.Liang@amd.com>
Reviewed-by: Arvind Yadav <Arvind.Yadav@amd.com>
Signed-off-by: Jesse Zhang <Jesse.Zhang@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c