From: Karol Wachowski <karol.wachow...@intel.com>

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.lawrynow...@linux.intel.com>
Signed-off-by: Karol Wachowski <karol.wachow...@intel.com>
Signed-off-by: Jacek Lawrynowicz <jacek.lawrynow...@linux.intel.com>
---
 drivers/accel/ivpu/ivpu_job.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/drivers/accel/ivpu/ivpu_job.c b/drivers/accel/ivpu/ivpu_job.c
index 3c162ac41a1dc..c1013f511efa6 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;
 
-- 
2.45.1

Reply via email to