From: "Wludzik, Jozef" <[email protected]>

Fix a race that can occur when multiple jobs submit the same dmabuf.
This could cause the sg_table to be mapped twice, leading to undefined
behavior.

Fixes: e0c0891cd63b ("accel/ivpu: Rework bind/unbind of imported buffers")
Signed-off-by: Wludzik, Jozef <[email protected]>
Signed-off-by: Karol Wachowski <[email protected]>
---
 drivers/accel/ivpu/ivpu_gem.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/accel/ivpu/ivpu_gem.c b/drivers/accel/ivpu/ivpu_gem.c
index e9830ad48d4b..e7277e02840a 100644
--- a/drivers/accel/ivpu/ivpu_gem.c
+++ b/drivers/accel/ivpu/ivpu_gem.c
@@ -46,12 +46,13 @@ static inline void ivpu_bo_unlock(struct ivpu_bo *bo)
 
 static struct sg_table *ivpu_bo_map_attachment(struct ivpu_device *vdev, 
struct ivpu_bo *bo)
 {
-       struct sg_table *sgt = bo->base.sgt;
+       struct sg_table *sgt;
 
        drm_WARN_ON(&vdev->drm, !bo->base.base.import_attach);
 
        ivpu_bo_lock(bo);
 
+       sgt = bo->base.sgt;
        if (!sgt) {
                sgt = dma_buf_map_attachment(bo->base.base.import_attach, 
DMA_BIDIRECTIONAL);
                if (IS_ERR(sgt))
-- 
2.43.0

Reply via email to