change to use amdgpu_read_lock/unlock which could handle more cases

Signed-off-by: Dennis Li <dennis...@amd.com>

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c
index bcaf271b39bf..66dec0f49c4a 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c
@@ -59,11 +59,12 @@ int amdgpu_debugfs_wait_dump(struct amdgpu_device *adev)
 static int amdgpu_debugfs_autodump_open(struct inode *inode, struct file *file)
 {
        struct amdgpu_device *adev = inode->i_private;
+       struct drm_device *dev = adev_to_drm(adev);
        int ret;
 
        file->private_data = adev;
 
-       ret = down_read_killable(&adev->reset_sem);
+       ret = amdgpu_read_lock(dev, true);
        if (ret)
                return ret;
 
@@ -74,7 +75,7 @@ static int amdgpu_debugfs_autodump_open(struct inode *inode, 
struct file *file)
                ret = -EBUSY;
        }
 
-       up_read(&adev->reset_sem);
+       amdgpu_read_unlock(dev);
 
        return ret;
 }
@@ -1206,7 +1207,7 @@ static int amdgpu_debugfs_test_ib_show(struct seq_file 
*m, void *unused)
        }
 
        /* Avoid accidently unparking the sched thread during GPU reset */
-       r = down_read_killable(&adev->reset_sem);
+       r = amdgpu_read_lock(dev, true);
        if (r)
                return r;
 
@@ -1235,7 +1236,7 @@ static int amdgpu_debugfs_test_ib_show(struct seq_file 
*m, void *unused)
                kthread_unpark(ring->sched.thread);
        }
 
-       up_read(&adev->reset_sem);
+       amdgpu_read_unlock(dev);
 
        pm_runtime_mark_last_busy(dev->dev);
        pm_runtime_put_autosuspend(dev->dev);
@@ -1427,6 +1428,7 @@ static int amdgpu_debugfs_ib_preempt(void *data, u64 val)
        struct amdgpu_ring *ring;
        struct dma_fence **fences = NULL;
        struct amdgpu_device *adev = (struct amdgpu_device *)data;
+       struct drm_device *dev = adev_to_drm(adev);
 
        if (val >= AMDGPU_MAX_RINGS)
                return -EINVAL;
@@ -1446,7 +1448,7 @@ static int amdgpu_debugfs_ib_preempt(void *data, u64 val)
                return -ENOMEM;
 
        /* Avoid accidently unparking the sched thread during GPU reset */
-       r = down_read_killable(&adev->reset_sem);
+       r = amdgpu_read_lock(dev, true);
        if (r)
                goto pro_end;
 
@@ -1489,7 +1491,7 @@ static int amdgpu_debugfs_ib_preempt(void *data, u64 val)
        /* restart the scheduler */
        kthread_unpark(ring->sched.thread);
 
-       up_read(&adev->reset_sem);
+       amdgpu_read_unlock(dev);
 
        ttm_bo_unlock_delayed_workqueue(&adev->mman.bdev, resched);
 
diff --git a/drivers/gpu/drm/amd/amdgpu/mxgpu_ai.c 
b/drivers/gpu/drm/amd/amdgpu/mxgpu_ai.c
index 3ee481557fc9..113c63bf187f 100644
--- a/drivers/gpu/drm/amd/amdgpu/mxgpu_ai.c
+++ b/drivers/gpu/drm/amd/amdgpu/mxgpu_ai.c
@@ -247,12 +247,13 @@ static void xgpu_ai_mailbox_flr_work(struct work_struct 
*work)
        struct amdgpu_virt *virt = container_of(work, struct amdgpu_virt, 
flr_work);
        struct amdgpu_device *adev = container_of(virt, struct amdgpu_device, 
virt);
        int timeout = AI_MAILBOX_POLL_FLR_TIMEDOUT;
+       struct drm_device *dev = adev_to_drm(adev);
 
        /* block amdgpu_gpu_recover till msg FLR COMPLETE received,
         * otherwise the mailbox msg will be ruined/reseted by
         * the VF FLR.
         */
-       if (!down_read_trylock(&adev->reset_sem))
+       if (amdgpu_read_lock(dev, true))
                return;
 
        amdgpu_virt_fini_data_exchange(adev);
@@ -268,7 +269,7 @@ static void xgpu_ai_mailbox_flr_work(struct work_struct 
*work)
 
 flr_done:
        atomic_set(&adev->in_gpu_reset, 0);
-       up_read(&adev->reset_sem);
+       amdgpu_read_unlock(dev);
 
        /* Trigger recovery for world switch failure if no TDR */
        if (amdgpu_device_should_recover_gpu(adev)
diff --git a/drivers/gpu/drm/amd/amdgpu/mxgpu_nv.c 
b/drivers/gpu/drm/amd/amdgpu/mxgpu_nv.c
index 48e588d3c409..2cd910e5caa7 100644
--- a/drivers/gpu/drm/amd/amdgpu/mxgpu_nv.c
+++ b/drivers/gpu/drm/amd/amdgpu/mxgpu_nv.c
@@ -268,12 +268,13 @@ static void xgpu_nv_mailbox_flr_work(struct work_struct 
*work)
        struct amdgpu_virt *virt = container_of(work, struct amdgpu_virt, 
flr_work);
        struct amdgpu_device *adev = container_of(virt, struct amdgpu_device, 
virt);
        int timeout = NV_MAILBOX_POLL_FLR_TIMEDOUT;
+       struct drm_device *dev = adev_to_drm(adev);
 
        /* block amdgpu_gpu_recover till msg FLR COMPLETE received,
         * otherwise the mailbox msg will be ruined/reseted by
         * the VF FLR.
         */
-       if (!down_read_trylock(&adev->reset_sem))
+       if (amdgpu_read_lock(dev, true))
                return;
 
        amdgpu_virt_fini_data_exchange(adev);
@@ -289,7 +290,7 @@ static void xgpu_nv_mailbox_flr_work(struct work_struct 
*work)
 
 flr_done:
        atomic_set(&adev->in_gpu_reset, 0);
-       up_read(&adev->reset_sem);
+       amdgpu_read_unlock(dev);
 
        /* Trigger recovery for world switch failure if no TDR */
        if (amdgpu_device_should_recover_gpu(adev)
-- 
2.17.1

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to