drm/amdgpu: Fix module unload hang with RAS enabled
authorMukul Joshi <mukul.joshi@amd.com>
Wed, 24 Jan 2024 02:14:51 +0000 (10:14 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Thu, 25 Jan 2024 19:57:52 +0000 (14:57 -0500)
The driver unload hangs because the page retirement
kthread cannot be stopped as it is sleeping and waiting
on page retirement event to occur. Add kthread_should_stop()
to the event condition to wake up the kthread when kthread
stop is called during driver unload.

Fixes: 3fdcd0a31d7a ("drm/amdgpu: Prepare for asynchronous processing of umc page retirement")
Signed-off-by: Mukul Joshi <mukul.joshi@amd.com>
Reviewed-by: Hawking Zhang <Hawking.Zhang@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c

index a32e7eb..80816c4 100644 (file)
@@ -2670,8 +2670,12 @@ static int amdgpu_ras_page_retirement_thread(void *param)
        while (!kthread_should_stop()) {
 
                wait_event_interruptible(con->page_retirement_wq,
+                               kthread_should_stop() ||
                                atomic_read(&con->page_retirement_req_cnt));
 
+               if (kthread_should_stop())
+                       break;
+
                dev_info(adev->dev, "Start processing page retirement. request:%d\n",
                        atomic_read(&con->page_retirement_req_cnt));