diff options
| author | Jozef Wludzik <jozef.wludzik@intel.com> | 2026-09-14 10:30:06 +0200 |
|---|---|---|
| committer | Karol Wachowski <karol.wachowski@linux.intel.com> | 2026-09-17 09:35:05 +0200 |
| commit | 2c6be28cee1624b622d5dbd02f85c80bc7b8dbc5 (patch) | |
| tree | 2c7625975f47c3c7ccf96cc1f90ac2c296082d03 | |
| parent | efb67f52fb36186935a56bc2ceda6567dfd97c47 (diff) | |
accel/ivpu: Synchronize context abort work with device reset
Acquire pm->reset_lock in ivpu_context_abort_work_fn() to prevent it
from running concurrently with a device reset. If the lock cannot be
acquired immediately, skip the abort work to avoid racing with reset.
The device power management is disabled during reset.
Signed-off-by: Jozef Wludzik <jozef.wludzik@intel.com>
Reviewed-by: Dawid Osuchowski <dawid.osuchowski@linux.intel.com>
Signed-off-by: Karol Wachowski <karol.wachowski@linux.intel.com>
Link: https://patch.msgid.link/20260914083006.892645-1-karol.wachowski@linux.intel.com
| -rw-r--r-- | drivers/accel/ivpu/ivpu_job.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/drivers/accel/ivpu/ivpu_job.c b/drivers/accel/ivpu/ivpu_job.c index b3de5dd29d1e..96023221eb55 100644 --- a/drivers/accel/ivpu/ivpu_job.c +++ b/drivers/accel/ivpu/ivpu_job.c @@ -1301,9 +1301,12 @@ void ivpu_context_abort_work_fn(struct work_struct *work) unsigned long ctx_id; unsigned long id; - if (drm_WARN_ON(&vdev->drm, pm_runtime_get_if_active(vdev->drm.dev) <= 0)) + if (!down_read_trylock(&vdev->pm->reset_lock)) return; + if (drm_WARN_ON(&vdev->drm, pm_runtime_get_if_active(vdev->drm.dev) <= 0)) + goto unlock; + if (vdev->fw->sched_mode == VPU_SCHEDULING_MODE_HW) if (reset_engine_and_mark_faulty_contexts(vdev)) goto runtime_put; @@ -1344,4 +1347,6 @@ void ivpu_context_abort_work_fn(struct work_struct *work) runtime_put: pm_runtime_put_autosuspend(vdev->drm.dev); +unlock: + up_read(&vdev->pm->reset_lock); } |
