Skip to content

Commit 9c549ab

Browse files
committed
virtio-gpu: block migration of VMs with blob=true
"blob" resources don't have an associated pixman image: #0 pixman_image_get_stride (image=0x0) at ../pixman/pixman-image.c:921 #1 0x0000562327c25236 in virtio_gpu_save (f=0x56232bb13b00, opaque=0x56232b555a60, size=0, field=0x5623289ab6c8 <__compound_literal.3+104>, vmdesc=0x56232ab59fe0) at ../hw/display/virtio-gpu.c:1225 Related to: https://bugzilla.redhat.com/show_bug.cgi?id=2236353 Signed-off-by: Marc-André Lureau <[email protected]> Acked-by: Peter Xu <[email protected]>
1 parent 08730ee commit 9c549ab

File tree

1 file changed

+14
-0
lines changed

1 file changed

+14
-0
lines changed

hw/display/virtio-gpu.c

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
#include "hw/virtio/virtio-gpu-pixman.h"
2727
#include "hw/virtio/virtio-bus.h"
2828
#include "hw/qdev-properties.h"
29+
#include "migration/blocker.h"
2930
#include "qemu/log.h"
3031
#include "qemu/module.h"
3132
#include "qapi/error.h"
@@ -40,6 +41,8 @@ virtio_gpu_find_check_resource(VirtIOGPU *g, uint32_t resource_id,
4041

4142
static void virtio_gpu_reset_bh(void *opaque);
4243

44+
static Error *blob_mig_blocker;
45+
4346
void virtio_gpu_update_cursor_data(VirtIOGPU *g,
4447
struct virtio_gpu_scanout *s,
4548
uint32_t resource_id)
@@ -1373,6 +1376,14 @@ void virtio_gpu_device_realize(DeviceState *qdev, Error **errp)
13731376
error_setg(errp, "blobs and virgl are not compatible (yet)");
13741377
return;
13751378
}
1379+
1380+
if (!blob_mig_blocker) {
1381+
error_setg(&blob_mig_blocker,
1382+
"virtio-gpu blob VMs are currently not migratable.");
1383+
}
1384+
if (migrate_add_blocker(blob_mig_blocker, errp)) {
1385+
return;
1386+
}
13761387
}
13771388

13781389
if (!virtio_gpu_base_device_realize(qdev,
@@ -1399,6 +1410,9 @@ static void virtio_gpu_device_unrealize(DeviceState *qdev)
13991410
{
14001411
VirtIOGPU *g = VIRTIO_GPU(qdev);
14011412

1413+
if (virtio_gpu_blob_enabled(g->parent_obj.conf)) {
1414+
migrate_del_blocker(blob_mig_blocker);
1415+
}
14021416
g_clear_pointer(&g->ctrl_bh, qemu_bh_delete);
14031417
g_clear_pointer(&g->cursor_bh, qemu_bh_delete);
14041418
g_clear_pointer(&g->reset_bh, qemu_bh_delete);

0 commit comments

Comments
 (0)