88 lines
3.1 KiB
Diff
88 lines
3.1 KiB
Diff
|
From 5db0b4131c56d96760b3300298f4bedab99d35cb Mon Sep 17 00:00:00 2001
|
||
|
From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= <marcandre.lureau@redhat.com>
|
||
|
Date: Wed, 6 Sep 2023 17:00:22 +0400
|
||
|
Subject: [PATCH 100/101] virtio-gpu: block migration of VMs with blob=true
|
||
|
MIME-Version: 1.0
|
||
|
Content-Type: text/plain; charset=UTF-8
|
||
|
Content-Transfer-Encoding: 8bit
|
||
|
|
||
|
RH-Author: Marc-André Lureau <marcandre.lureau@redhat.com>
|
||
|
RH-MergeRequest: 217: virtio-gpu: block migration of VMs with blob=true
|
||
|
RH-Jira: RHEL-7565
|
||
|
RH-Commit: [1/1] f978ca697d574b1419eb027a1007c060dfb83298
|
||
|
|
||
|
JIRA: https://issues.redhat.com/browse/RHEL-7565
|
||
|
|
||
|
commit 9c549ab6895a43ad0cb33e684e11cdb0b5400897
|
||
|
Author: Marc-André Lureau <marcandre.lureau@redhat.com>
|
||
|
Date: Wed Sep 6 17:00:22 2023 +0400
|
||
|
|
||
|
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 <marcandre.lureau@redhat.com>
|
||
|
Acked-by: Peter Xu <peterx@redhat.com>
|
||
|
|
||
|
[ rhel backport - fix Error* vs Error** argument ]
|
||
|
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
|
||
|
---
|
||
|
hw/display/virtio-gpu.c | 14 ++++++++++++++
|
||
|
1 file changed, 14 insertions(+)
|
||
|
|
||
|
diff --git a/hw/display/virtio-gpu.c b/hw/display/virtio-gpu.c
|
||
|
index b016d3bac8..1702190ead 100644
|
||
|
--- a/hw/display/virtio-gpu.c
|
||
|
+++ b/hw/display/virtio-gpu.c
|
||
|
@@ -27,6 +27,7 @@
|
||
|
#include "hw/virtio/virtio-gpu-pixman.h"
|
||
|
#include "hw/virtio/virtio-bus.h"
|
||
|
#include "hw/qdev-properties.h"
|
||
|
+#include "migration/blocker.h"
|
||
|
#include "qemu/log.h"
|
||
|
#include "qemu/module.h"
|
||
|
#include "qapi/error.h"
|
||
|
@@ -41,6 +42,8 @@ virtio_gpu_find_check_resource(VirtIOGPU *g, uint32_t resource_id,
|
||
|
|
||
|
static void virtio_gpu_reset_bh(void *opaque);
|
||
|
|
||
|
+static Error *blob_mig_blocker;
|
||
|
+
|
||
|
void virtio_gpu_update_cursor_data(VirtIOGPU *g,
|
||
|
struct virtio_gpu_scanout *s,
|
||
|
uint32_t resource_id)
|
||
|
@@ -1452,6 +1455,14 @@ void virtio_gpu_device_realize(DeviceState *qdev, Error **errp)
|
||
|
error_setg(errp, "blobs and virgl are not compatible (yet)");
|
||
|
return;
|
||
|
}
|
||
|
+
|
||
|
+ if (!blob_mig_blocker) {
|
||
|
+ error_setg(&blob_mig_blocker,
|
||
|
+ "virtio-gpu blob VMs are currently not migratable.");
|
||
|
+ }
|
||
|
+ if (migrate_add_blocker(&blob_mig_blocker, errp)) {
|
||
|
+ return;
|
||
|
+ }
|
||
|
}
|
||
|
|
||
|
if (!virtio_gpu_base_device_realize(qdev,
|
||
|
@@ -1478,6 +1489,9 @@ static void virtio_gpu_device_unrealize(DeviceState *qdev)
|
||
|
{
|
||
|
VirtIOGPU *g = VIRTIO_GPU(qdev);
|
||
|
|
||
|
+ if (virtio_gpu_blob_enabled(g->parent_obj.conf)) {
|
||
|
+ migrate_del_blocker(&blob_mig_blocker);
|
||
|
+ }
|
||
|
g_clear_pointer(&g->ctrl_bh, qemu_bh_delete);
|
||
|
g_clear_pointer(&g->cursor_bh, qemu_bh_delete);
|
||
|
g_clear_pointer(&g->reset_bh, qemu_bh_delete);
|
||
|
--
|
||
|
2.39.3
|
||
|
|