OSDN Git Service

drm/amdgpu: Cache result of last reset at reset domain level.
authorAndrey Grodzovsky <andrey.grodzovsky@amd.com>
Tue, 17 May 2022 15:17:35 +0000 (11:17 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Fri, 10 Jun 2022 19:25:34 +0000 (15:25 -0400)
Will be read by executors of async reset like debugfs.

Signed-off-by: Andrey Grodzovsky <andrey.grodzovsky@amd.com>
Reviewed-by: Christian König <christian.koenig@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_reset.c
drivers/gpu/drm/amd/amdgpu/amdgpu_reset.h

index b9d50cb..6abec88 100644 (file)
@@ -5318,6 +5318,8 @@ skip_sched_resume:
 
        if (r)
                dev_info(adev->dev, "GPU reset end with ret = %d\n", r);
+
+       atomic_set(&adev->reset_domain->reset_res, r);
        return r;
 }
 
@@ -5332,7 +5334,7 @@ static void amdgpu_device_queue_gpu_recover_work(struct work_struct *work)
 {
        struct amdgpu_recover_work_struct *recover_work = container_of(work, struct amdgpu_recover_work_struct, base);
 
-       recover_work->ret = amdgpu_device_gpu_recover_imp(recover_work->adev, recover_work->job);
+       amdgpu_device_gpu_recover_imp(recover_work->adev, recover_work->job);
 }
 /*
  * Serialize gpu recover into reset domain single threaded wq
@@ -5349,7 +5351,7 @@ int amdgpu_device_gpu_recover(struct amdgpu_device *adev,
 
        flush_work(&work.base);
 
-       return work.ret;
+       return atomic_read(&adev->reset_domain->reset_res);
 }
 
 /**
index c80af08..32c86a0 100644 (file)
@@ -132,6 +132,7 @@ struct amdgpu_reset_domain *amdgpu_reset_create_reset_domain(enum amdgpu_reset_d
        }
 
        atomic_set(&reset_domain->in_gpu_reset, 0);
+       atomic_set(&reset_domain->reset_res, 0);
        init_rwsem(&reset_domain->sem);
 
        return reset_domain;
index 1949dbe..9e55a5d 100644 (file)
@@ -82,6 +82,7 @@ struct amdgpu_reset_domain {
        enum amdgpu_reset_domain_type type;
        struct rw_semaphore sem;
        atomic_t in_gpu_reset;
+       atomic_t reset_res;
 };