mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/netdev/net.git/
synced 2026-04-18 06:33:43 -04:00
drm/virtio: factor out context create hypercall
We currently create an OpenGL context when opening the DRM fd if 3D is available. We may need other context types (VK,..) in the future, and the plan is to have explicit initialization for that. For explicit initialization to work, we need to factor out virtio_gpu_create_context from driver initialization. v2: Move context handle initialization too (olv) v6: Remove redundant 3D check (emil.velikov) Reviewed-by: Chia-I Wu <olvaffe@gmail.com> Reviewed-by: Emil Velikov <emil.velikov@collabora.com> Signed-off-by: Gurchetan Singh <gurchetansingh@chromium.org> Link: http://patchwork.freedesktop.org/patch/msgid/20200225000800.2966-2-gurchetansingh@chromium.org Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
This commit is contained in:
committed by
Gerd Hoffmann
parent
30349f8f64
commit
40cadedd20
@@ -52,19 +52,6 @@ static void virtio_gpu_config_changed_work_func(struct work_struct *work)
|
||||
events_clear, &events_clear);
|
||||
}
|
||||
|
||||
static int virtio_gpu_context_create(struct virtio_gpu_device *vgdev,
|
||||
uint32_t nlen, const char *name)
|
||||
{
|
||||
int handle = ida_alloc(&vgdev->ctx_id_ida, GFP_KERNEL);
|
||||
|
||||
if (handle < 0)
|
||||
return handle;
|
||||
handle += 1;
|
||||
virtio_gpu_cmd_context_create(vgdev, handle, nlen, name);
|
||||
virtio_gpu_notify(vgdev);
|
||||
return handle;
|
||||
}
|
||||
|
||||
static void virtio_gpu_context_destroy(struct virtio_gpu_device *vgdev,
|
||||
uint32_t ctx_id)
|
||||
{
|
||||
@@ -260,8 +247,7 @@ int virtio_gpu_driver_open(struct drm_device *dev, struct drm_file *file)
|
||||
{
|
||||
struct virtio_gpu_device *vgdev = dev->dev_private;
|
||||
struct virtio_gpu_fpriv *vfpriv;
|
||||
int id;
|
||||
char dbgname[TASK_COMM_LEN];
|
||||
int handle;
|
||||
|
||||
/* can't create contexts without 3d renderer */
|
||||
if (!vgdev->has_virgl_3d)
|
||||
@@ -272,15 +258,15 @@ int virtio_gpu_driver_open(struct drm_device *dev, struct drm_file *file)
|
||||
if (!vfpriv)
|
||||
return -ENOMEM;
|
||||
|
||||
get_task_comm(dbgname, current);
|
||||
id = virtio_gpu_context_create(vgdev, strlen(dbgname), dbgname);
|
||||
if (id < 0) {
|
||||
handle = ida_alloc(&vgdev->ctx_id_ida, GFP_KERNEL);
|
||||
if (handle < 0) {
|
||||
kfree(vfpriv);
|
||||
return id;
|
||||
return handle;
|
||||
}
|
||||
|
||||
vfpriv->ctx_id = id;
|
||||
vfpriv->ctx_id = handle + 1;
|
||||
file->driver_priv = vfpriv;
|
||||
virtio_gpu_create_context(dev, file);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user