Skip to content

Commit 4720e0a

Browse files
akacprowjlawryno
authored andcommitted
accel/ivpu: Add missing locks around mmu queues
Multiple threads were accessing mmu cmd queue simultaneously causing sporadic failures in ivpu_mmu_cmdq_sync() function. Protect critical code with mmu mutex. Reviewed-by: Jacek Lawrynowicz <jacek.lawrynowicz@linux.intel.com> Signed-off-by: Andrzej Kacprowski <Andrzej.Kacprowski@intel.com> Signed-off-by: Jacek Lawrynowicz <jacek.lawrynowicz@linux.intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20250204084622.2422544-2-jacek.lawrynowicz@linux.intel.com
1 parent 6f3d9d0 commit 4720e0a

1 file changed

Lines changed: 9 additions & 0 deletions

File tree

drivers/accel/ivpu/ivpu_mmu.c

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -895,6 +895,9 @@ static int ivpu_mmu_evtq_disable(struct ivpu_device *vdev)
895895

896896
void ivpu_mmu_discard_events(struct ivpu_device *vdev)
897897
{
898+
struct ivpu_mmu_info *mmu = vdev->mmu;
899+
900+
mutex_lock(&mmu->lock);
898901
/*
899902
* Disable event queue (stop MMU from updating the producer)
900903
* to allow synchronization of consumer and producer indexes
@@ -908,6 +911,8 @@ void ivpu_mmu_discard_events(struct ivpu_device *vdev)
908911
ivpu_mmu_evtq_enable(vdev);
909912

910913
drm_WARN_ON_ONCE(&vdev->drm, vdev->mmu->evtq.cons != vdev->mmu->evtq.prod);
914+
915+
mutex_unlock(&mmu->lock);
911916
}
912917

913918
int ivpu_mmu_disable_ssid_events(struct ivpu_device *vdev, u32 ssid)
@@ -920,6 +925,8 @@ int ivpu_mmu_disable_ssid_events(struct ivpu_device *vdev, u32 ssid)
920925
if (ssid > IVPU_MMU_CDTAB_ENT_COUNT)
921926
return -EINVAL;
922927

928+
mutex_lock(&mmu->lock);
929+
923930
entry = cdtab->base + (ssid * IVPU_MMU_CDTAB_ENT_SIZE);
924931

925932
val = READ_ONCE(entry[0]);
@@ -932,6 +939,8 @@ int ivpu_mmu_disable_ssid_events(struct ivpu_device *vdev, u32 ssid)
932939
ivpu_mmu_cmdq_write_cfgi_all(vdev);
933940
ivpu_mmu_cmdq_sync(vdev);
934941

942+
mutex_unlock(&mmu->lock);
943+
935944
return 0;
936945
}
937946

0 commit comments

Comments
 (0)