drm/amdgpu: Wait for reset on init completion
authorLijo Lazar <lijo.lazar@amd.com>
Mon, 7 Oct 2024 08:19:45 +0000 (13:49 +0530)
committerAlex Deucher <alexander.deucher@amd.com>
Tue, 15 Oct 2024 15:22:26 +0000 (11:22 -0400)
When reset on initialization is requested, wait for the reset to finish.
In cases where module is loaded after boot, this makes sure all
initialization work is done after a successful return of modprobe.

Signed-off-by: Lijo Lazar <lijo.lazar@amd.com>
Reviewed-by: Ramesh Errabolu <ramesh.errabolu@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu_xgmi.c

index 6350371..fcdbcff 100644 (file)
@@ -1548,6 +1548,7 @@ static void amdgpu_xgmi_schedule_reset_on_init(struct amdgpu_hive_info *hive)
 int amdgpu_xgmi_reset_on_init(struct amdgpu_device *adev)
 {
        struct amdgpu_hive_info *hive;
+       bool reset_scheduled;
        int num_devs;
 
        hive = amdgpu_get_xgmi_hive(adev);
@@ -1556,12 +1557,18 @@ int amdgpu_xgmi_reset_on_init(struct amdgpu_device *adev)
 
        mutex_lock(&hive->hive_lock);
        num_devs = atomic_read(&hive->number_devices);
-       if (num_devs == adev->gmc.xgmi.num_physical_nodes)
+       reset_scheduled = false;
+       if (num_devs == adev->gmc.xgmi.num_physical_nodes) {
                amdgpu_xgmi_schedule_reset_on_init(hive);
+               reset_scheduled = true;
+       }
 
        mutex_unlock(&hive->hive_lock);
        amdgpu_put_xgmi_hive(hive);
 
+       if (reset_scheduled)
+               flush_work(&hive->reset_on_init_work);
+
        return 0;
 }