From: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-pra...@amd.com>

Xorg context creation fails for native contexts that use
VIRTGPU_CONTEXT_INIT because context is already initialized implicitly
when dumb buffer is created. Fix it by not creating default vrend context
if context_init is supported.

Signed-off-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-pra...@amd.com>
Signed-off-by: Dmitry Osipenko <dmitry.osipe...@collabora.com>
---
 drivers/gpu/drm/virtio/virtgpu_gem.c | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/drivers/gpu/drm/virtio/virtgpu_gem.c 
b/drivers/gpu/drm/virtio/virtgpu_gem.c
index 7db48d17ee3a..67f557e058b4 100644
--- a/drivers/gpu/drm/virtio/virtgpu_gem.c
+++ b/drivers/gpu/drm/virtio/virtgpu_gem.c
@@ -127,15 +127,17 @@ int virtio_gpu_gem_object_open(struct drm_gem_object *obj,
        /* the context might still be missing when the first ioctl is
         * DRM_IOCTL_MODE_CREATE_DUMB or DRM_IOCTL_PRIME_FD_TO_HANDLE
         */
-       virtio_gpu_create_context(obj->dev, file);
+       if (!vgdev->has_context_init)
+               virtio_gpu_create_context(obj->dev, file);
 
        objs = virtio_gpu_array_alloc(1);
        if (!objs)
                return -ENOMEM;
        virtio_gpu_array_add_obj(objs, obj);
 
-       virtio_gpu_cmd_context_attach_resource(vgdev, vfpriv->ctx_id,
-                                              objs);
+       if (vfpriv->ctx_id)
+               virtio_gpu_cmd_context_attach_resource(vgdev, vfpriv->ctx_id, 
objs);
+
 out_notify:
        virtio_gpu_notify(vgdev);
        return 0;
-- 
2.47.0

Reply via email to