drm/amdgpu: Move in_gpu_reset into reset_domain
authorAndrey Grodzovsky <andrey.grodzovsky@amd.com>
Wed, 19 Jan 2022 22:20:00 +0000 (17:20 -0500)
committerAndrey Grodzovsky <andrey.grodzovsky@amd.com>
Wed, 9 Feb 2022 17:17:57 +0000 (12:17 -0500)
We should have a single instance per entrire reset domain.

Signed-off-by: Andrey Grodzovsky <andrey.grodzovsky@amd.com>
Suggested-by: Lijo Lazar <lijo.lazar@amd.com>
Reviewed-by: Christian König <christian.koenig@amd.com>
Link: https://www.spinics.net/lists/amd-gfx/msg74116.html
drivers/gpu/drm/amd/amdgpu/amdgpu.h
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
drivers/gpu/drm/amd/amdgpu/amdgpu_reset.c
drivers/gpu/drm/amd/amdgpu/amdgpu_reset.h
drivers/gpu/drm/amd/amdgpu/mxgpu_ai.c
drivers/gpu/drm/amd/amdgpu/mxgpu_nv.c

index ddfbcc8fd3d38f2c99d77b8b1b79fcb90927bc14..b89406b016946db7796c677224aae30a2cab5b30 100644 (file)
@@ -1056,7 +1056,6 @@ struct amdgpu_device {
        bool                            in_s4;
        bool                            in_s0ix;
 
-       atomic_t                        in_gpu_reset;
        enum pp_mp1_state               mp1_state;
        struct amdgpu_doorbell_index doorbell_index;
 
@@ -1463,8 +1462,6 @@ static inline bool amdgpu_is_tmz(struct amdgpu_device *adev)
        return adev->gmc.tmz_enabled;
 }
 
-static inline int amdgpu_in_reset(struct amdgpu_device *adev)
-{
-       return atomic_read(&adev->in_gpu_reset);
-}
+int amdgpu_in_reset(struct amdgpu_device *adev);
+
 #endif
index dcbb175d336f2f1594e3b763507dd727fa81d56f..e05d7cbefd2c95d4e709762c44e6212150b57237 100644 (file)
@@ -3554,7 +3554,6 @@ int amdgpu_device_init(struct amdgpu_device *adev,
        mutex_init(&adev->mn_lock);
        mutex_init(&adev->virt.vf_errors.lock);
        hash_init(adev->mn_hash);
-       atomic_set(&adev->in_gpu_reset, 0);
        mutex_init(&adev->psp.mutex);
        mutex_init(&adev->notifier_lock);
 
@@ -4829,7 +4828,7 @@ end:
 static void amdgpu_device_lock_adev(struct amdgpu_device *adev,
                                struct amdgpu_hive_info *hive)
 {
-       atomic_set(&adev->in_gpu_reset, 1);
+       atomic_set(&adev->reset_domain->in_gpu_reset, 1);
 
        if (hive) {
                down_write_nest_lock(&adev->reset_domain->sem, &hive->hive_lock);
@@ -4854,7 +4853,7 @@ static void amdgpu_device_unlock_adev(struct amdgpu_device *adev)
 {
        amdgpu_vf_error_trans_all(adev);
        adev->mp1_state = PP_MP1_STATE_NONE;
-       atomic_set(&adev->in_gpu_reset, 0);
+       atomic_set(&adev->reset_domain->in_gpu_reset, 0);
        up_write(&adev->reset_domain->sem);
 }
 
@@ -5699,6 +5698,11 @@ void amdgpu_device_invalidate_hdp(struct amdgpu_device *adev,
        amdgpu_asic_invalidate_hdp(adev, ring);
 }
 
+int amdgpu_in_reset(struct amdgpu_device *adev)
+{
+       return atomic_read(&adev->reset_domain->in_gpu_reset);
+       }
+       
 /**
  * amdgpu_device_halt() - bring hardware to some kind of halt state
  *
index c0988c804459f7ee23649b8299ab111b45773e0b..5ab72c3bfbda520c943133bf1f67c621c83b3217 100644 (file)
@@ -131,6 +131,7 @@ struct amdgpu_reset_domain *amdgpu_reset_create_reset_domain(enum amdgpu_reset_d
 
        }
 
+       atomic_set(&reset_domain->in_gpu_reset, 0);
        init_rwsem(&reset_domain->sem);
 
        return reset_domain;
index 80f918e87d4f697cd91ecc2f8e251a3c43cab5fd..ea6fc98ea9271593011f37da57223908d2b9922c 100644 (file)
@@ -81,6 +81,7 @@ struct amdgpu_reset_domain {
        struct workqueue_struct *wq;
        enum amdgpu_reset_domain_type type;
        struct rw_semaphore sem;
+       atomic_t in_gpu_reset;
 };
 
 
index 4e23c29e665c124693351587d5065fdea631f0ad..b81acf59870c5be2a2df32e9a5bbd90f2e41206a 100644 (file)
@@ -259,7 +259,7 @@ static void xgpu_ai_mailbox_flr_work(struct work_struct *work)
         * otherwise the mailbox msg will be ruined/reseted by
         * the VF FLR.
         */
-       if (atomic_cmpxchg(&adev->in_gpu_reset, 0, 1) != 0)
+       if (atomic_cmpxchg(&adev->reset_domain->in_gpu_reset, 0, 1) != 0)
                return;
 
        down_write(&adev->reset_domain->sem);
@@ -277,7 +277,7 @@ static void xgpu_ai_mailbox_flr_work(struct work_struct *work)
        } while (timeout > 1);
 
 flr_done:
-       atomic_set(&adev->in_gpu_reset, 0);
+       atomic_set(&adev->reset_domain->in_gpu_reset, 0);
        up_write(&adev->reset_domain->sem);
 
        /* Trigger recovery for world switch failure if no TDR */
index f715780f7d20beb19905c7e2938ff395eb9a6b55..22c10b97ea81f7326b3fa5558aaa10aa9ef63e05 100644 (file)
@@ -283,7 +283,7 @@ static void xgpu_nv_mailbox_flr_work(struct work_struct *work)
         * otherwise the mailbox msg will be ruined/reseted by
         * the VF FLR.
         */
-       if (atomic_cmpxchg(&adev->in_gpu_reset, 0, 1) != 0)
+       if (atomic_cmpxchg(&adev->reset_domain->in_gpu_reset, 0, 1) != 0)
                return;
 
        down_write(&adev->reset_domain->sem);
@@ -301,7 +301,7 @@ static void xgpu_nv_mailbox_flr_work(struct work_struct *work)
        } while (timeout > 1);
 
 flr_done:
-       atomic_set(&adev->in_gpu_reset, 0);
+       atomic_set(&adev->reset_domain->in_gpu_reset, 0);
        up_write(&adev->reset_domain->sem);
 
        /* Trigger recovery for world switch failure if no TDR */