summaryrefslogtreecommitdiff
path: root/drivers/accel
diff options
context:
space:
mode:
authorKarol Wachowski <karol.wachowski@intel.com>2025-01-29 13:56:33 +0100
committerJacek Lawrynowicz <jacek.lawrynowicz@linux.intel.com>2025-02-03 10:40:34 +0100
commit2f5bbea1807a064a1e4c1b385c8cea4f37bb4b17 (patch)
treefd855fdf22306fd69ecea941fad6eaf6401fb8bd /drivers/accel
parentb8c00323ae65e1bbee9f87a1e66592b589f53b50 (diff)
downloadlwn-2f5bbea1807a064a1e4c1b385c8cea4f37bb4b17.tar.gz
lwn-2f5bbea1807a064a1e4c1b385c8cea4f37bb4b17.zip
accel/ivpu: Fix missing MMU events if file_priv is unbound
Move the ivpu_mmu_discard_events() function to the common portion of the abort work function. This ensures it is called only once, even if there are no faulty contexts in context_xa, to guarantee that MMU events are discarded and new events are not missed. Reviewed-by: Jacek Lawrynowicz <jacek.lawrynowicz@linux.intel.com> Signed-off-by: Karol Wachowski <karol.wachowski@intel.com> Reviewed-by: Jeffrey Hugo <quic_jhugo@quicinc.com> Signed-off-by: Jacek Lawrynowicz <jacek.lawrynowicz@linux.intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20250129125636.1047413-4-jacek.lawrynowicz@linux.intel.com
Diffstat (limited to 'drivers/accel')
-rw-r--r--drivers/accel/ivpu/ivpu_job.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/drivers/accel/ivpu/ivpu_job.c b/drivers/accel/ivpu/ivpu_job.c
index 3c162ac41a1d..c1013f511efa 100644
--- a/drivers/accel/ivpu/ivpu_job.c
+++ b/drivers/accel/ivpu/ivpu_job.c
@@ -375,7 +375,6 @@ void ivpu_context_abort_locked(struct ivpu_file_priv *file_priv)
ivpu_jsm_context_release(vdev, file_priv->ctx.id);
ivpu_mmu_disable_ssid_events(vdev, file_priv->ctx.id);
- ivpu_mmu_discard_events(vdev);
file_priv->aborted = true;
}
@@ -980,6 +979,13 @@ void ivpu_context_abort_work_fn(struct work_struct *work)
}
mutex_unlock(&vdev->context_list_lock);
+ /*
+ * We will not receive new MMU event interrupts until existing events are discarded
+ * however, we want to discard these events only after aborting the faulty context
+ * to avoid generating new faults from that context
+ */
+ ivpu_mmu_discard_events(vdev);
+
if (vdev->fw->sched_mode != VPU_SCHEDULING_MODE_HW)
return;