From 2c6be28cee1624b622d5dbd02f85c80bc7b8dbc5 Mon Sep 17 00:00:00 2001 From: Jozef Wludzik Date: Mon, 14 Sep 2026 10:30:06 +0200 Subject: [PATCH] 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 Reviewed-by: Dawid Osuchowski Signed-off-by: Karol Wachowski Link: https://patch.msgid.link/20260914083006.892645-1-karol.wachowski@linux.intel.com --- drivers/accel/ivpu/ivpu_job.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) 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); }