Blame 0025-virtio-serial-bus-replay-guest_open-on-migration.patch

Justin M. Forbes 13f703
>From a1f7b1a638423f74a7a8e3e141f760777dcbd1ab Mon Sep 17 00:00:00 2001
Justin M. Forbes 13f703
From: Alon Levy <alevy@redhat.com>
Justin M. Forbes 13f703
Date: Thu, 28 Jul 2011 15:08:48 +0300
Justin M. Forbes 13f703
Subject: [PATCH 25/25] virtio-serial-bus: replay guest_open on migration
Justin M. Forbes 13f703
Justin M. Forbes 13f703
When migrating a host with with a spice agent running the mouse becomes
Justin M. Forbes 13f703
non operational after the migration. This is rhbz #725965.
Justin M. Forbes 13f703
Justin M. Forbes 13f703
The problem is that after migration spice doesn't know the guest agent is open.
Justin M. Forbes 13f703
Spice is just a char dev here. And a chardev cannot query it's device, the
Justin M. Forbes 13f703
device has to let the chardev know when it is open. Right now after migration
Justin M. Forbes 13f703
the chardev which is recreated is in it's default state, which assumes the
Justin M. Forbes 13f703
guest is disconnected.
Justin M. Forbes 13f703
Justin M. Forbes 13f703
Char devices carry no information across migration, but the virtio-serial does
Justin M. Forbes 13f703
already carry the guest_connected state. This patch passes that bit to the
Justin M. Forbes 13f703
chardev.
Justin M. Forbes 13f703
Justin M. Forbes 13f703
Signed-off-by: Alon Levy <alevy@redhat.com>
Justin M. Forbes 13f703
---
Justin M. Forbes 13f703
 hw/virtio-serial-bus.c |    6 ++++++
Justin M. Forbes 13f703
 1 files changed, 6 insertions(+), 0 deletions(-)
Justin M. Forbes 13f703
Justin M. Forbes 13f703
diff --git a/hw/virtio-serial-bus.c b/hw/virtio-serial-bus.c
Justin M. Forbes 13f703
index c5eb931..4a6d932 100644
Justin M. Forbes 13f703
--- a/hw/virtio-serial-bus.c
Justin M. Forbes 13f703
+++ b/hw/virtio-serial-bus.c
Justin M. Forbes 13f703
@@ -618,6 +618,7 @@ static int virtio_serial_load(QEMUFile *f, void *opaque, int version_id)
Justin M. Forbes 13f703
     for (i = 0; i < nr_active_ports; i++) {
Justin M. Forbes 13f703
         uint32_t id;
Justin M. Forbes 13f703
         bool host_connected;
Justin M. Forbes 13f703
+        VirtIOSerialPortInfo *info;
Justin M. Forbes 13f703
 
Justin M. Forbes 13f703
         id = qemu_get_be32(f);
Justin M. Forbes 13f703
         port = find_port_by_id(s, id);
Justin M. Forbes 13f703
@@ -626,6 +627,11 @@ static int virtio_serial_load(QEMUFile *f, void *opaque, int version_id)
Justin M. Forbes 13f703
         }
Justin M. Forbes 13f703
 
Justin M. Forbes 13f703
         port->guest_connected = qemu_get_byte(f);
Justin M. Forbes 13f703
+        info = DO_UPCAST(VirtIOSerialPortInfo, qdev, port->dev.info);
Justin M. Forbes 13f703
+        if (port->guest_connected && info->guest_open) {
Justin M. Forbes 13f703
+            /* replay guest open */
Justin M. Forbes 13f703
+            info->guest_open(port);
Justin M. Forbes 13f703
+        }
Justin M. Forbes 13f703
         host_connected = qemu_get_byte(f);
Justin M. Forbes 13f703
         if (host_connected != port->host_connected) {
Justin M. Forbes 13f703
             /*
Justin M. Forbes 13f703
-- 
Justin M. Forbes 13f703
1.7.5.1
Justin M. Forbes 13f703