|
Alon Levy |
cc85c4 |
From 5b6831175b21aa5a3405a21dd79e1ef0a81bbdb3 Mon Sep 17 00:00:00 2001
|
|
Alon Levy |
cc85c4 |
From: Alon Levy <alevy@redhat.com>
|
|
Alon Levy |
cc85c4 |
Date: Fri, 16 Nov 2012 16:24:47 +0200
|
|
Alon Levy |
cc85c4 |
Subject: [PATCH 2/2] hw/virtio-serial-bus: replay guest open on destination
|
|
Alon Levy |
cc85c4 |
|
|
Alon Levy |
cc85c4 |
This is rewrite of a patch carried in Fedora previously based
|
|
Alon Levy |
cc85c4 |
on new code upstream, here is the original message, it still applies:
|
|
Alon Levy |
cc85c4 |
(the original fedora patch was commit id
|
|
Alon Levy |
cc85c4 |
a9bc20afc1f0604ee81c23b7c67d627e51d2e8d4, this is useful for grepping in
|
|
Alon Levy |
cc85c4 |
logs, it isn't in upstream)
|
|
Alon Levy |
cc85c4 |
|
|
Alon Levy |
cc85c4 |
When migrating a host with with a spice agent running the mouse becomes
|
|
Alon Levy |
cc85c4 |
non operational after the migration. This is rhbz #725965.
|
|
Alon Levy |
cc85c4 |
|
|
Alon Levy |
cc85c4 |
The problem is that after migration spice doesn't know the guest agent
|
|
Alon Levy |
cc85c4 |
is open. Spice is just a char dev here. And a chardev cannot query it's
|
|
Alon Levy |
cc85c4 |
device, the device has to let the chardev know when it is open. Right
|
|
Alon Levy |
cc85c4 |
now after migration the chardev which is recreated is in it's default
|
|
Alon Levy |
cc85c4 |
state, which assumes the guest is disconnected.
|
|
Alon Levy |
cc85c4 |
|
|
Alon Levy |
cc85c4 |
Char devices carry no information across migration, but the
|
|
Alon Levy |
cc85c4 |
virtio-serial does already carry the guest_connected state. This patch
|
|
Alon Levy |
cc85c4 |
passes that bit to the chardev.
|
|
Alon Levy |
cc85c4 |
---
|
|
Alon Levy |
cc85c4 |
hw/virtio-serial-bus.c | 6 ++++++
|
|
Alon Levy |
cc85c4 |
1 file changed, 6 insertions(+)
|
|
Alon Levy |
cc85c4 |
|
|
Alon Levy |
cc85c4 |
diff --git a/hw/virtio-serial-bus.c b/hw/virtio-serial-bus.c
|
|
Alon Levy |
cc85c4 |
index a028877..a6ec2df 100644
|
|
Alon Levy |
cc85c4 |
--- a/hw/virtio-serial-bus.c
|
|
Alon Levy |
cc85c4 |
+++ b/hw/virtio-serial-bus.c
|
|
Alon Levy |
cc85c4 |
@@ -641,6 +641,7 @@ static void virtio_serial_post_load_timer_cb(void *opaque)
|
|
Alon Levy |
cc85c4 |
VirtIOSerial *s = opaque;
|
|
Alon Levy |
cc85c4 |
VirtIOSerialPort *port;
|
|
Alon Levy |
cc85c4 |
uint8_t host_connected;
|
|
Alon Levy |
cc85c4 |
+ VirtIOSerialPortClass *vsc;
|
|
Alon Levy |
cc85c4 |
|
|
Alon Levy |
cc85c4 |
for (i = 0 ; i < s->post_load.nr_active_ports; ++i) {
|
|
Alon Levy |
cc85c4 |
port = s->post_load.connected[i].port;
|
|
Alon Levy |
cc85c4 |
@@ -653,6 +654,11 @@ static void virtio_serial_post_load_timer_cb(void *opaque)
|
|
Alon Levy |
cc85c4 |
send_control_event(port, VIRTIO_CONSOLE_PORT_OPEN,
|
|
Alon Levy |
cc85c4 |
port->host_connected);
|
|
Alon Levy |
cc85c4 |
}
|
|
Alon Levy |
cc85c4 |
+ vsc = VIRTIO_SERIAL_PORT_GET_CLASS(port);
|
|
Alon Levy |
cc85c4 |
+ if (port->guest_connected && vsc->guest_open) {
|
|
Alon Levy |
cc85c4 |
+ /* replay guest open */
|
|
Alon Levy |
cc85c4 |
+ vsc->guest_open(port);
|
|
Alon Levy |
cc85c4 |
+ }
|
|
Alon Levy |
cc85c4 |
}
|
|
Alon Levy |
cc85c4 |
g_free(s->post_load.connected);
|
|
Alon Levy |
cc85c4 |
s->post_load.connected = NULL;
|
|
Alon Levy |
cc85c4 |
--
|
|
Alon Levy |
cc85c4 |
1.8.0
|
|
Alon Levy |
cc85c4 |
|