]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
drm/amd: Clean up kfd node on surprise disconnect
authorMario Limonciello (AMD) <superm1@kernel.org>
Wed, 7 Jan 2026 21:37:28 +0000 (15:37 -0600)
committerAlex Deucher <alexander.deucher@amd.com>
Wed, 14 Jan 2026 19:51:36 +0000 (14:51 -0500)
When an eGPU is unplugged the KFD topology should also be destroyed
for that GPU. This never happens because the fini_sw callbacks never
get to run. Run them manually before calling amdgpu_device_ip_fini_early()
when a device has already been disconnected.

This location is intentionally chosen to make sure that the kfd locking
refcount doesn't get incremented unintentionally.

Cc: kent.russell@amd.com
Closes: https://community.frame.work/t/amd-egpu-on-linux/8691/33
Signed-off-by: Mario Limonciello (AMD) <superm1@kernel.org>
Reviewed-by: Kent Russell <kent.russell@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
(cherry picked from commit 6a23e7b4332c10f8b56c33a9c5431b52ecff9aab)
Cc: stable@vger.kernel.org
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c

index d5c44bd34d456d5d2d8cf8d54faf371685e15b3c..d2c3885de711f0653e452f36e6357fcfc291a292 100644 (file)
@@ -5063,6 +5063,14 @@ void amdgpu_device_fini_hw(struct amdgpu_device *adev)
 
        amdgpu_ttm_set_buffer_funcs_status(adev, false);
 
+       /*
+        * device went through surprise hotplug; we need to destroy topology
+        * before ip_fini_early to prevent kfd locking refcount issues by calling
+        * amdgpu_amdkfd_suspend()
+        */
+       if (drm_dev_is_unplugged(adev_to_drm(adev)))
+               amdgpu_amdkfd_device_fini_sw(adev);
+
        amdgpu_device_ip_fini_early(adev);
 
        amdgpu_irq_fini_hw(adev);