ui/vdagent: add a migration blocker
authorMarc-André Lureau <marcandre.lureau@redhat.com>
Thu, 5 Aug 2021 13:57:15 +0000 (17:57 +0400)
committerMarc-André Lureau <marcandre.lureau@redhat.com>
Tue, 31 Aug 2021 13:25:14 +0000 (17:25 +0400)
The current implementation lacks migration support. After migration,
vdagent support will be broken (even after a restart of the daemons).
Let's try to fix it in 6.2.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Message-Id: <20210805135715.857938-19-marcandre.lureau@redhat.com>
Acked-by: Gerd Hoffmann <kraxel@redhat.com>
ui/vdagent.c

index 7d8cb963ffb1cd8bf6d1b5aac673ca3c8292925f..19e8fbfc96f156308e94df7379d3467f2026b046 100644 (file)
@@ -6,6 +6,7 @@
 #include "qemu/option.h"
 #include "qemu/units.h"
 #include "hw/qdev-core.h"
+#include "migration/blocker.h"
 #include "ui/clipboard.h"
 #include "ui/console.h"
 #include "ui/input.h"
@@ -23,6 +24,9 @@
 struct VDAgentChardev {
     Chardev parent;
 
+    /* TODO: migration isn't yet supported */
+    Error *migration_blocker;
+
     /* config */
     bool mouse;
     bool clipboard;
@@ -599,6 +603,10 @@ static void vdagent_chr_open(Chardev *chr,
     return;
 #endif
 
+    if (migrate_add_blocker(vd->migration_blocker, errp) != 0) {
+        return;
+    }
+
     vd->mouse = VDAGENT_MOUSE_DEFAULT;
     if (cfg->has_mouse) {
         vd->mouse = cfg->mouse;
@@ -832,14 +840,18 @@ static void vdagent_chr_init(Object *obj)
     VDAgentChardev *vd = QEMU_VDAGENT_CHARDEV(obj);
 
     buffer_init(&vd->outbuf, "vdagent-outbuf");
+    error_setg(&vd->migration_blocker,
+               "The vdagent chardev doesn't yet support migration");
 }
 
 static void vdagent_chr_fini(Object *obj)
 {
     VDAgentChardev *vd = QEMU_VDAGENT_CHARDEV(obj);
 
+    migrate_del_blocker(vd->migration_blocker);
     vdagent_disconnect(vd);
     buffer_free(&vd->outbuf);
+    error_free(vd->migration_blocker);
 }
 
 static const TypeInfo vdagent_chr_type_info = {