Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3a34c700 authored by Dave Airlie's avatar Dave Airlie Committed by Alistair Delva
Browse files

BACKPORT: Revert "drm/virtio: drop prime import/export callbacks"



This patch does more harm than good, as it breaks both Xwayland and
gnome-shell with X11.

Xwayland requires DRI3 & DRI3 requires PRIME.

X11 crash for obscure double-free reason which are hard to debug
(starting X11 by hand doesn't trigger the crash).

I don't see an apparent problem implementing those stub prime
functions, they may return an error at run-time, and it seems to be
handled fine by GNOME at least.

This reverts commit b318e3ff7ca065d6b107e424c85a63d7a6798a69.
[airlied:
This broke userspace for virtio-gpus, and regressed things from DRI3 to DRI2.

This brings back the original problem, but it's better than regressions.]

Fixes: b318e3ff7ca065d6b107e424c85a63d7a6798a ("drm/virtio: drop prime import/export callbacks")
Signed-off-by: default avatarMarc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
(cherry picked from commit a0cecc23cfcbf2626497a8c8770856dd56b67917)
Signed-off-by: default avatarGreg Hartman <ghartman@google.com>
BUG: 139386237
Change-Id: Ie752f363df21c597e55cb1204cf464e4b1fd4b4b
parent b3ca97fd
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -134,10 +134,14 @@ static struct drm_driver driver = {
#if defined(CONFIG_DEBUG_FS)
	.debugfs_init = virtio_gpu_debugfs_init,
#endif
	.prime_handle_to_fd = drm_gem_prime_handle_to_fd,
	.prime_fd_to_handle = drm_gem_prime_fd_to_handle,
	.gem_prime_export = drm_gem_prime_export,
	.gem_prime_import = drm_gem_prime_import,
	.gem_prime_pin = virtgpu_gem_prime_pin,
	.gem_prime_unpin = virtgpu_gem_prime_unpin,
	.gem_prime_get_sg_table = virtgpu_gem_prime_get_sg_table,
	.gem_prime_import_sg_table = virtgpu_gem_prime_import_sg_table,
	.gem_prime_vmap = virtgpu_gem_prime_vmap,
	.gem_prime_vunmap = virtgpu_gem_prime_vunmap,
	.gem_prime_mmap = virtgpu_gem_prime_mmap,
+4 −0
Original line number Diff line number Diff line
@@ -360,6 +360,10 @@ int virtio_gpu_object_wait(struct virtio_gpu_object *bo, bool no_wait);
/* virtgpu_prime.c */
int virtgpu_gem_prime_pin(struct drm_gem_object *obj);
void virtgpu_gem_prime_unpin(struct drm_gem_object *obj);
struct sg_table *virtgpu_gem_prime_get_sg_table(struct drm_gem_object *obj);
struct drm_gem_object *virtgpu_gem_prime_import_sg_table(
	struct drm_device *dev, struct dma_buf_attachment *attach,
	struct sg_table *sgt);
void *virtgpu_gem_prime_vmap(struct drm_gem_object *obj);
void virtgpu_gem_prime_vunmap(struct drm_gem_object *obj, void *vaddr);
int virtgpu_gem_prime_mmap(struct drm_gem_object *obj,
+14 −0
Original line number Diff line number Diff line
@@ -39,6 +39,20 @@ void virtgpu_gem_prime_unpin(struct drm_gem_object *obj)
	WARN_ONCE(1, "not implemented");
}

struct sg_table *virtgpu_gem_prime_get_sg_table(struct drm_gem_object *obj)
{
	WARN_ONCE(1, "not implemented");
	return ERR_PTR(-ENODEV);
}

struct drm_gem_object *virtgpu_gem_prime_import_sg_table(
	struct drm_device *dev, struct dma_buf_attachment *attach,
	struct sg_table *table)
{
	WARN_ONCE(1, "not implemented");
	return ERR_PTR(-ENODEV);
}

void *virtgpu_gem_prime_vmap(struct drm_gem_object *obj)
{
	struct virtio_gpu_object *bo = gem_to_virtio_gpu_obj(obj);