Skip to content

Commit 0a88a15

Browse files
kwachowsgregkh
authored andcommitted
accel/ivpu: Fix missing MMU events from reserved SSID
commit 353b8f4 upstream. Generate recovery when fault from reserved context is detected. Add Abort (A) bit to reserved (1) SSID to ensure NPU also receives a fault. There is no way to create a file_priv with reserved SSID but it is still possible to receive MMU faults from that SSID as it is a default NPU HW setting. Such situation will occur if FW freed context related resources but still performed access to DRAM. Signed-off-by: Karol Wachowski <karol.wachowski@intel.com> Signed-off-by: Maciej Falkowski <maciej.falkowski@linux.intel.com> Reviewed-by: Jacek Lawrynowicz <jacek.lawrynowicz@linux.intel.com> Signed-off-by: Jacek Lawrynowicz <jacek.lawrynowicz@linux.intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20250107173238.381120-9-maciej.falkowski@linux.intel.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
1 parent 0e548ea commit 0a88a15

1 file changed

Lines changed: 4 additions & 3 deletions

File tree

drivers/accel/ivpu/ivpu_mmu.c

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -725,8 +725,8 @@ static int ivpu_mmu_cdtab_entry_set(struct ivpu_device *vdev, u32 ssid, u64 cd_d
725725
cd[2] = 0;
726726
cd[3] = 0x0000000000007444;
727727

728-
/* For global context generate memory fault on VPU */
729-
if (ssid == IVPU_GLOBAL_CONTEXT_MMU_SSID)
728+
/* For global and reserved contexts generate memory fault on VPU */
729+
if (ssid == IVPU_GLOBAL_CONTEXT_MMU_SSID || ssid == IVPU_RESERVED_CONTEXT_MMU_SSID)
730730
cd[0] |= IVPU_MMU_CD_0_A;
731731

732732
if (valid)
@@ -945,7 +945,8 @@ void ivpu_mmu_irq_evtq_handler(struct ivpu_device *vdev)
945945

946946
while ((event = ivpu_mmu_get_event(vdev))) {
947947
ssid = FIELD_GET(IVPU_MMU_EVT_SSID_MASK, *event);
948-
if (ssid == IVPU_GLOBAL_CONTEXT_MMU_SSID) {
948+
if (ssid == IVPU_GLOBAL_CONTEXT_MMU_SSID ||
949+
ssid == IVPU_RESERVED_CONTEXT_MMU_SSID) {
949950
ivpu_mmu_dump_event(vdev, event);
950951
ivpu_pm_trigger_recovery(vdev, "MMU event");
951952
return;

0 commit comments

Comments
 (0)