drm/amdgpu: Skip the coredump collection on reset during driver reload
authorAhmad Rehman <Ahmad.Rehman@amd.com>
Tue, 16 Apr 2024 18:29:15 +0000 (13:29 -0500)
committerAlex Deucher <alexander.deucher@amd.com>
Fri, 19 Apr 2024 03:46:45 +0000 (23:46 -0400)
In passthrough environment, the driver triggers the mode-1 reset on
reload. The reset causes the core dump collection which is delayed task
and prevents driver from unloading until it is completed. Since we do
not need to collect data on "reset on reload" case, we can skip core
dump collection.

v2: Use the same flag to avoid calling amdgpu_reset_reg_dumps as well.

Signed-off-by: Ahmad Rehman <Ahmad.Rehman@amd.com>
Reviewed-by: Lijo Lazar <lijo.lazar@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
drivers/gpu/drm/amd/amdgpu/amdgpu_reset.h

index 1b2e177bc2d6b3b3f3d6da4cc8caa038d3d33b63..f3b7cb18fd460d948284bcededd71ec325739133 100644 (file)
@@ -5357,7 +5357,9 @@ int amdgpu_do_asic_reset(struct list_head *device_list_handle,
        /* Try reset handler method first */
        tmp_adev = list_first_entry(device_list_handle, struct amdgpu_device,
                                    reset_list);
-       amdgpu_reset_reg_dumps(tmp_adev);
+
+       if (!test_bit(AMDGPU_SKIP_COREDUMP, &reset_context->flags))
+               amdgpu_reset_reg_dumps(tmp_adev);
 
        reset_context->reset_device_list = device_list_handle;
        r = amdgpu_reset_perform_reset(tmp_adev, reset_context);
@@ -5430,7 +5432,8 @@ int amdgpu_do_asic_reset(struct list_head *device_list_handle,
 
                                vram_lost = amdgpu_device_check_vram_lost(tmp_adev);
 
-                               amdgpu_coredump(tmp_adev, vram_lost, reset_context);
+                               if (!test_bit(AMDGPU_SKIP_COREDUMP, &reset_context->flags))
+                                       amdgpu_coredump(tmp_adev, vram_lost, reset_context);
 
                                if (vram_lost) {
                                        DRM_INFO("VRAM is lost due to GPU reset!\n");
index 6ea893ad9a3621a31b8ee254edfc9f6cedc8d4cb..c512f70b82723905f95759b33bdfd1578002d1fa 100644 (file)
@@ -2481,6 +2481,7 @@ static void amdgpu_drv_delayed_reset_work_handler(struct work_struct *work)
 
        /* Use a common context, just need to make sure full reset is done */
        set_bit(AMDGPU_SKIP_HW_RESET, &reset_context.flags);
+       set_bit(AMDGPU_SKIP_COREDUMP, &reset_context.flags);
        r = amdgpu_do_asic_reset(&device_list, &reset_context);
 
        if (r) {
index 66125d43cf217ed31c9d96e2a6a50d2f8158dbb6..b11d190ece53514c61c0cb81850b51e44e8182cc 100644 (file)
@@ -32,6 +32,7 @@ enum AMDGPU_RESET_FLAGS {
 
        AMDGPU_NEED_FULL_RESET = 0,
        AMDGPU_SKIP_HW_RESET = 1,
+       AMDGPU_SKIP_COREDUMP = 2,
 };
 
 struct amdgpu_reset_context {