Commit 11f38236 authored by Dmitry Osipenko's avatar Dmitry Osipenko
Browse files

drm: Don't assert held reservation lock for dma-buf mmapping



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: default avatarEmil Velikov <emil.l.velikov@gmail.com>
Acked-by: default avatarChristian König <christian.koenig@amd.com>
Signed-off-by: default avatarDmitry 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
parent 42850c9a
Loading
Loading
Loading
Loading
+0 −2
Original line number Diff line number Diff line
@@ -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);
+0 −2
Original line number Diff line number Diff line
@@ -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;

+0 −2
Original line number Diff line number Diff line
@@ -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;
+0 −2
Original line number Diff line number Diff line
@@ -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;