|
@@ -1136,6 +1136,7 @@ static void virtio_gpu_device_realize(DeviceState *qdev, Error **errp)
|
|
VirtIODevice *vdev = VIRTIO_DEVICE(qdev);
|
|
VirtIODevice *vdev = VIRTIO_DEVICE(qdev);
|
|
VirtIOGPU *g = VIRTIO_GPU(qdev);
|
|
VirtIOGPU *g = VIRTIO_GPU(qdev);
|
|
bool have_virgl;
|
|
bool have_virgl;
|
|
|
|
+ Error *local_err = NULL;
|
|
int i;
|
|
int i;
|
|
|
|
|
|
if (g->conf.max_outputs > VIRTIO_GPU_MAX_SCANOUTS) {
|
|
if (g->conf.max_outputs > VIRTIO_GPU_MAX_SCANOUTS) {
|
|
@@ -1143,14 +1144,6 @@ static void virtio_gpu_device_realize(DeviceState *qdev, Error **errp)
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
|
|
|
|
- g->config_size = sizeof(struct virtio_gpu_config);
|
|
|
|
- g->virtio_config.num_scanouts = g->conf.max_outputs;
|
|
|
|
- virtio_init(VIRTIO_DEVICE(g), "virtio-gpu", VIRTIO_ID_GPU,
|
|
|
|
- g->config_size);
|
|
|
|
-
|
|
|
|
- g->req_state[0].width = 1024;
|
|
|
|
- g->req_state[0].height = 768;
|
|
|
|
-
|
|
|
|
g->use_virgl_renderer = false;
|
|
g->use_virgl_renderer = false;
|
|
#if !defined(CONFIG_VIRGL) || defined(HOST_WORDS_BIGENDIAN)
|
|
#if !defined(CONFIG_VIRGL) || defined(HOST_WORDS_BIGENDIAN)
|
|
have_virgl = false;
|
|
have_virgl = false;
|
|
@@ -1161,6 +1154,24 @@ static void virtio_gpu_device_realize(DeviceState *qdev, Error **errp)
|
|
g->conf.flags &= ~(1 << VIRTIO_GPU_FLAG_VIRGL_ENABLED);
|
|
g->conf.flags &= ~(1 << VIRTIO_GPU_FLAG_VIRGL_ENABLED);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ if (virtio_gpu_virgl_enabled(g->conf)) {
|
|
|
|
+ error_setg(&g->migration_blocker, "virgl is not yet migratable");
|
|
|
|
+ migrate_add_blocker(g->migration_blocker, &local_err);
|
|
|
|
+ if (local_err) {
|
|
|
|
+ error_propagate(errp, local_err);
|
|
|
|
+ error_free(g->migration_blocker);
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ g->config_size = sizeof(struct virtio_gpu_config);
|
|
|
|
+ g->virtio_config.num_scanouts = g->conf.max_outputs;
|
|
|
|
+ virtio_init(VIRTIO_DEVICE(g), "virtio-gpu", VIRTIO_ID_GPU,
|
|
|
|
+ g->config_size);
|
|
|
|
+
|
|
|
|
+ g->req_state[0].width = 1024;
|
|
|
|
+ g->req_state[0].height = 768;
|
|
|
|
+
|
|
if (virtio_gpu_virgl_enabled(g->conf)) {
|
|
if (virtio_gpu_virgl_enabled(g->conf)) {
|
|
/* use larger control queue in 3d mode */
|
|
/* use larger control queue in 3d mode */
|
|
g->ctrl_vq = virtio_add_queue(vdev, 256, virtio_gpu_handle_ctrl_cb);
|
|
g->ctrl_vq = virtio_add_queue(vdev, 256, virtio_gpu_handle_ctrl_cb);
|
|
@@ -1187,11 +1198,6 @@ static void virtio_gpu_device_realize(DeviceState *qdev, Error **errp)
|
|
dpy_gfx_replace_surface(g->scanout[i].con, NULL);
|
|
dpy_gfx_replace_surface(g->scanout[i].con, NULL);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
-
|
|
|
|
- if (virtio_gpu_virgl_enabled(g->conf)) {
|
|
|
|
- error_setg(&g->migration_blocker, "virgl is not yet migratable");
|
|
|
|
- migrate_add_blocker(g->migration_blocker);
|
|
|
|
- }
|
|
|
|
}
|
|
}
|
|
|
|
|
|
static void virtio_gpu_device_unrealize(DeviceState *qdev, Error **errp)
|
|
static void virtio_gpu_device_unrealize(DeviceState *qdev, Error **errp)
|