We need to be able to non blocking cancel pending reset works
from within GPU reset. Currently kernel API allows this only
for delayed_work and not for work_struct. Switch to delayed
work and queue it with delay 0 which is equal to queueing work
struct.

Signed-off-by: Andrey Grodzovsky <andrey.grodzov...@amd.com>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 8 ++++----
 drivers/gpu/drm/amd/amdgpu/amdgpu_reset.h  | 4 ++--
 drivers/gpu/drm/amd/amdgpu/amdgpu_virt.h   | 2 +-
 drivers/gpu/drm/amd/amdgpu/mxgpu_ai.c      | 4 ++--
 drivers/gpu/drm/amd/amdgpu/mxgpu_nv.c      | 4 ++--
 drivers/gpu/drm/amd/amdgpu/mxgpu_vi.c      | 4 ++--
 6 files changed, 13 insertions(+), 13 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
index 3948e7db6ad7..ea41edf52a6f 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
@@ -5309,7 +5309,7 @@ int amdgpu_device_gpu_recover_imp(struct amdgpu_device 
*adev,
 }
 
 struct amdgpu_recover_work_struct {
-       struct work_struct base;
+       struct delayed_work base;
        struct amdgpu_device *adev;
        struct amdgpu_job *job;
        int ret;
@@ -5317,7 +5317,7 @@ struct amdgpu_recover_work_struct {
 
 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);
+       struct amdgpu_recover_work_struct *recover_work = container_of(work, 
struct amdgpu_recover_work_struct, base.work);
 
        amdgpu_device_gpu_recover_imp(recover_work->adev, recover_work->job);
 }
@@ -5329,12 +5329,12 @@ int amdgpu_device_gpu_recover(struct amdgpu_device 
*adev,
 {
        struct amdgpu_recover_work_struct work = {.adev = adev, .job = job};
 
-       INIT_WORK(&work.base, amdgpu_device_queue_gpu_recover_work);
+       INIT_DELAYED_WORK(&work.base, amdgpu_device_queue_gpu_recover_work);
 
        if (!amdgpu_reset_domain_schedule(adev->reset_domain, &work.base))
                return -EAGAIN;
 
-       flush_work(&work.base);
+       flush_delayed_work(&work.base);
 
        return atomic_read(&adev->reset_domain->reset_res);
 }
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_reset.h 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_reset.h
index 9e55a5d7a825..fee9376d495a 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_reset.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_reset.h
@@ -114,9 +114,9 @@ static inline void amdgpu_reset_put_reset_domain(struct 
amdgpu_reset_domain *dom
 }
 
 static inline bool amdgpu_reset_domain_schedule(struct amdgpu_reset_domain 
*domain,
-                                               struct work_struct *work)
+                                               struct delayed_work *work)
 {
-       return queue_work(domain->wq, work);
+       return queue_delayed_work(domain->wq, work, 0);
 }
 
 void amdgpu_device_lock_reset_domain(struct amdgpu_reset_domain *reset_domain);
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.h 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.h
index 239f232f9c02..b53b7a794459 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.h
@@ -230,7 +230,7 @@ struct amdgpu_virt {
        uint32_t                        reg_val_offs;
        struct amdgpu_irq_src           ack_irq;
        struct amdgpu_irq_src           rcv_irq;
-       struct work_struct              flr_work;
+       struct delayed_work             flr_work;
        struct amdgpu_mm_table          mm_table;
        const struct amdgpu_virt_ops    *ops;
        struct amdgpu_vf_error_buffer   vf_errors;
diff --git a/drivers/gpu/drm/amd/amdgpu/mxgpu_ai.c 
b/drivers/gpu/drm/amd/amdgpu/mxgpu_ai.c
index b81acf59870c..aa5f6d6ea1e3 100644
--- a/drivers/gpu/drm/amd/amdgpu/mxgpu_ai.c
+++ b/drivers/gpu/drm/amd/amdgpu/mxgpu_ai.c
@@ -251,7 +251,7 @@ static int xgpu_ai_set_mailbox_ack_irq(struct amdgpu_device 
*adev,
 
 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_virt *virt = container_of(work, struct amdgpu_virt, 
flr_work.work);
        struct amdgpu_device *adev = container_of(virt, struct amdgpu_device, 
virt);
        int timeout = AI_MAILBOX_POLL_FLR_TIMEDOUT;
 
@@ -380,7 +380,7 @@ int xgpu_ai_mailbox_get_irq(struct amdgpu_device *adev)
                return r;
        }
 
-       INIT_WORK(&adev->virt.flr_work, xgpu_ai_mailbox_flr_work);
+       INIT_DELAYED_WORK(&adev->virt.flr_work, xgpu_ai_mailbox_flr_work);
 
        return 0;
 }
diff --git a/drivers/gpu/drm/amd/amdgpu/mxgpu_nv.c 
b/drivers/gpu/drm/amd/amdgpu/mxgpu_nv.c
index 22c10b97ea81..dd9f6b6f62f5 100644
--- a/drivers/gpu/drm/amd/amdgpu/mxgpu_nv.c
+++ b/drivers/gpu/drm/amd/amdgpu/mxgpu_nv.c
@@ -275,7 +275,7 @@ static int xgpu_nv_set_mailbox_ack_irq(struct amdgpu_device 
*adev,
 
 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_virt *virt = container_of(work, struct amdgpu_virt, 
flr_work.work);
        struct amdgpu_device *adev = container_of(virt, struct amdgpu_device, 
virt);
        int timeout = NV_MAILBOX_POLL_FLR_TIMEDOUT;
 
@@ -407,7 +407,7 @@ int xgpu_nv_mailbox_get_irq(struct amdgpu_device *adev)
                return r;
        }
 
-       INIT_WORK(&adev->virt.flr_work, xgpu_nv_mailbox_flr_work);
+       INIT_DELAYED_WORK(&adev->virt.flr_work, xgpu_nv_mailbox_flr_work);
 
        return 0;
 }
diff --git a/drivers/gpu/drm/amd/amdgpu/mxgpu_vi.c 
b/drivers/gpu/drm/amd/amdgpu/mxgpu_vi.c
index 7b63d30b9b79..b11831da1b13 100644
--- a/drivers/gpu/drm/amd/amdgpu/mxgpu_vi.c
+++ b/drivers/gpu/drm/amd/amdgpu/mxgpu_vi.c
@@ -512,7 +512,7 @@ static int xgpu_vi_set_mailbox_ack_irq(struct amdgpu_device 
*adev,
 
 static void xgpu_vi_mailbox_flr_work(struct work_struct *work)
 {
-       struct amdgpu_virt *virt = container_of(work, struct amdgpu_virt, 
flr_work);
+       struct amdgpu_virt *virt = container_of(work, struct amdgpu_virt, 
flr_work.work);
        struct amdgpu_device *adev = container_of(virt, struct amdgpu_device, 
virt);
 
        /* wait until RCV_MSG become 3 */
@@ -610,7 +610,7 @@ int xgpu_vi_mailbox_get_irq(struct amdgpu_device *adev)
                return r;
        }
 
-       INIT_WORK(&adev->virt.flr_work, xgpu_vi_mailbox_flr_work);
+       INIT_DELAYED_WORK(&adev->virt.flr_work, xgpu_vi_mailbox_flr_work);
 
        return 0;
 }
-- 
2.25.1

Reply via email to