Previously, aborting work could return early after engine reset or resume
failure, skipping the necessary runtime_put cleanup leaving the device
with incorrect reference count breaking runtime power management state.

Replace early returns with goto statements to ensure runtime_put is always
executed.

Signed-off-by: Karol Wachowski <karol.wachow...@linux.intel.com>
---
 drivers/accel/ivpu/ivpu_job.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/accel/ivpu/ivpu_job.c b/drivers/accel/ivpu/ivpu_job.c
index 521b7ac6e35e..044268d0fc87 100644
--- a/drivers/accel/ivpu/ivpu_job.c
+++ b/drivers/accel/ivpu/ivpu_job.c
@@ -1050,7 +1050,7 @@ void ivpu_context_abort_work_fn(struct work_struct *work)
 
        if (vdev->fw->sched_mode == VPU_SCHEDULING_MODE_HW)
                if (ivpu_jsm_reset_engine(vdev, 0))
-                       return;
+                       goto runtime_put;
 
        mutex_lock(&vdev->context_list_lock);
        xa_for_each(&vdev->context_xa, ctx_id, file_priv) {
@@ -1074,7 +1074,7 @@ void ivpu_context_abort_work_fn(struct work_struct *work)
                goto runtime_put;
 
        if (ivpu_jsm_hws_resume_engine(vdev, 0))
-               return;
+               goto runtime_put;
        /*
         * In hardware scheduling mode NPU already has stopped processing jobs
         * and won't send us any further notifications, thus we have to free 
job related resources
-- 
2.43.0

Reply via email to