]> git.ipfire.org Git - thirdparty/kernel/stable.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)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 23 Jan 2026 10:21:31 +0000 (11:21 +0100)
commit 28695ca09d326461f8078332aa01db516983e8a2 upstream.

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
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c

index 0cba31ec025c07169bb105913adae7e8e27ff195..49107475af619e086773aa64bf08b75841251b41 100644 (file)
@@ -4985,6 +4985,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);