drm: Don't assert held reservation lock for dma-buf mmapping
authorDmitry Osipenko <dmitry.osipenko@collabora.com>
Mon, 29 May 2023 22:39:33 +0000 (01:39 +0300)
committerDmitry Osipenko <dmitry.osipenko@collabora.com>
Wed, 21 Jun 2023 17:22:20 +0000 (20:22 +0300)
Don't assert held dma-buf reservation lock on memory mapping of exported
buffer.

We're going to change dma-buf mmap() locking policy such that exporters
will have to handle the lock. The previous locking policy caused deadlock
problem for DRM drivers in a case of self-imported dma-bufs once these
drivers are moved to use reservation lock universally. The problem is
solved by moving the lock down to exporters. This patch prepares DRM
drivers for the locking policy update.

Reviewed-by: Emil Velikov <emil.l.velikov@gmail.com>
Acked-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Dmitry Osipenko <dmitry.osipenko@collabora.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20230529223935.2672495-2-dmitry.osipenko@collabora.com
Link: https://patchwork.freedesktop.org/patch/msgid/20230529223935.2672495-3-dmitry.osipenko@collabora.com
Link: https://patchwork.freedesktop.org/patch/msgid/20230529223935.2672495-4-dmitry.osipenko@collabora.com
Link: https://patchwork.freedesktop.org/patch/msgid/20230529223935.2672495-2-dmitry.osipenko@collabora.com
Link: https://patchwork.freedesktop.org/patch/msgid/20230529223935.2672495-3-dmitry.osipenko@collabora.com
Link: https://patchwork.freedesktop.org/patch/msgid/20230529223935.2672495-4-dmitry.osipenko@collabora.com
drivers/gpu/drm/drm_prime.c
drivers/gpu/drm/i915/gem/i915_gem_dmabuf.c
drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c
drivers/gpu/drm/tegra/gem.c

index 6bcf324ef81c964da738e769e5d7912030ff2524..f9d4e228b09ea03441e7d14fc7a89cb4630c56c7 100644 (file)
@@ -778,8 +778,6 @@ int drm_gem_dmabuf_mmap(struct dma_buf *dma_buf, struct vm_area_struct *vma)
 {
        struct drm_gem_object *obj = dma_buf->priv;
 
-       dma_resv_assert_held(dma_buf->resv);
-
        return drm_gem_prime_mmap(obj, vma);
 }
 EXPORT_SYMBOL(drm_gem_dmabuf_mmap);
index fd556a076d05167d3160bbe9cb318a7d1bd6e5f4..1df74f7aa3dcbdda1b5dbff0df8dc07e3fa58a5b 100644 (file)
@@ -97,8 +97,6 @@ static int i915_gem_dmabuf_mmap(struct dma_buf *dma_buf, struct vm_area_struct *
        struct drm_i915_private *i915 = to_i915(obj->base.dev);
        int ret;
 
-       dma_resv_assert_held(dma_buf->resv);
-
        if (obj->base.size < vma->vm_end - vma->vm_start)
                return -EINVAL;
 
index 3abc47521b2c97b7bb237f22a3079f4805b5d5db..8e194dbc95066eb214563cb39e1922e48244ef80 100644 (file)
@@ -66,8 +66,6 @@ static int omap_gem_dmabuf_mmap(struct dma_buf *buffer,
        struct drm_gem_object *obj = buffer->priv;
        int ret = 0;
 
-       dma_resv_assert_held(buffer->resv);
-
        ret = drm_gem_mmap_obj(obj, omap_gem_mmap_size(obj), vma);
        if (ret < 0)
                return ret;
index dea38892d6e66e1d7c14bdae00a354a68e402aa7..a4023163493dca2a2f8c42a58184cbcbc656c9ae 100644 (file)
@@ -694,8 +694,6 @@ static int tegra_gem_prime_mmap(struct dma_buf *buf, struct vm_area_struct *vma)
        struct drm_gem_object *gem = buf->priv;
        int err;
 
-       dma_resv_assert_held(buf->resv);
-
        err = drm_gem_mmap_obj(gem, gem->size, vma);
        if (err < 0)
                return err;