summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPeter Maydell <peter.maydell@linaro.org>2015-05-29 10:17:48 +0100
committerPeter Maydell <peter.maydell@linaro.org>2015-05-29 10:17:49 +0100
commitba7c388963e099c0d2cedb7f048e30747ffff25d (patch)
tree0740800947805e1441b9f36953d3300afdcb47ee
parentce0274f730eacbd24c706523ddbbabb6b95d0659 (diff)
parentf7a8beb5e6a13dc924895244777d9ef08b23b367 (diff)
downloadhqemu-ba7c388963e099c0d2cedb7f048e30747ffff25d.zip
hqemu-ba7c388963e099c0d2cedb7f048e30747ffff25d.tar.gz
Merge remote-tracking branch 'remotes/spice/tags/pull-spice-20150529-1' into staging
spice: misc fixes. # gpg: Signature made Fri May 29 09:16:29 2015 BST using RSA key ID D3E87138 # gpg: Good signature from "Gerd Hoffmann (work) <kraxel@redhat.com>" # gpg: aka "Gerd Hoffmann <gerd@kraxel.org>" # gpg: aka "Gerd Hoffmann (private) <kraxel@gmail.com>" * remotes/spice/tags/pull-spice-20150529-1: spice: fix spice_chr_add_watch() pre-condition spice: don't update mm_time when spice-server is stopped. spice-char: notify the server when chardev is writable virtio-console: notify chardev when writable Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
-rw-r--r--hw/char/virtio-console.c10
-rw-r--r--hw/display/qxl.c4
-rw-r--r--spice-qemu-char.c13
-rw-r--r--ui/spice-core.c1
4 files changed, 27 insertions, 1 deletions
diff --git a/hw/char/virtio-console.c b/hw/char/virtio-console.c
index 752ed2c..2a867cb 100644
--- a/hw/char/virtio-console.c
+++ b/hw/char/virtio-console.c
@@ -95,6 +95,15 @@ static void set_guest_connected(VirtIOSerialPort *port, int guest_connected)
}
}
+static void guest_writable(VirtIOSerialPort *port)
+{
+ VirtConsole *vcon = VIRTIO_CONSOLE(port);
+
+ if (vcon->chr) {
+ qemu_chr_accept_input(vcon->chr);
+ }
+}
+
/* Readiness of the guest to accept data on a port */
static int chr_can_read(void *opaque)
{
@@ -188,6 +197,7 @@ static void virtserialport_class_init(ObjectClass *klass, void *data)
k->unrealize = virtconsole_unrealize;
k->have_data = flush_buf;
k->set_guest_connected = set_guest_connected;
+ k->guest_writable = guest_writable;
dc->props = virtserialport_properties;
}
diff --git a/hw/display/qxl.c b/hw/display/qxl.c
index 8f40dfb..b220e2d 100644
--- a/hw/display/qxl.c
+++ b/hw/display/qxl.c
@@ -504,6 +504,10 @@ static void interface_set_mm_time(QXLInstance *sin, uint32_t mm_time)
{
PCIQXLDevice *qxl = container_of(sin, PCIQXLDevice, ssd.qxl);
+ if (!qemu_spice_display_is_running(&qxl->ssd)) {
+ return;
+ }
+
trace_qxl_interface_set_mm_time(qxl->id, mm_time);
qxl->shadow_rom.mm_clock = cpu_to_le32(mm_time);
qxl->rom->mm_clock = cpu_to_le32(mm_time);
diff --git a/spice-qemu-char.c b/spice-qemu-char.c
index a4f4e57..d41bb74 100644
--- a/spice-qemu-char.c
+++ b/spice-qemu-char.c
@@ -110,6 +110,9 @@ static SpiceCharDeviceInterface vmc_interface = {
#if SPICE_SERVER_VERSION >= 0x000c02
.event = vmc_event,
#endif
+#if SPICE_SERVER_VERSION >= 0x000c06
+ .flags = SPICE_CHAR_DEVICE_NOTIFY_WRITABLE,
+#endif
};
@@ -169,7 +172,7 @@ static GSource *spice_chr_add_watch(CharDriverState *chr, GIOCondition cond)
SpiceCharDriver *scd = chr->opaque;
SpiceCharSource *src;
- assert(cond == G_IO_OUT);
+ assert(cond & G_IO_OUT);
src = (SpiceCharSource *)g_source_new(&SpiceCharSourceFuncs,
sizeof(SpiceCharSource));
@@ -260,6 +263,13 @@ static void print_allowed_subtypes(void)
fprintf(stderr, "\n");
}
+static void spice_chr_accept_input(struct CharDriverState *chr)
+{
+ SpiceCharDriver *s = chr->opaque;
+
+ spice_server_char_device_wakeup(&s->sin);
+}
+
static CharDriverState *chr_open(const char *subtype,
void (*set_fe_open)(struct CharDriverState *, int))
@@ -279,6 +289,7 @@ static CharDriverState *chr_open(const char *subtype,
chr->chr_set_fe_open = set_fe_open;
chr->explicit_be_open = true;
chr->chr_fe_event = spice_chr_fe_event;
+ chr->chr_accept_input = spice_chr_accept_input;
QLIST_INSERT_HEAD(&spice_chars, s, next);
diff --git a/ui/spice-core.c b/ui/spice-core.c
index f00e074..2e8384e 100644
--- a/ui/spice-core.c
+++ b/ui/spice-core.c
@@ -804,6 +804,7 @@ void qemu_spice_init(void)
qemu_spice_audio_init();
qemu_add_vm_change_state_handler(vm_change_state_handler, NULL);
+ qemu_spice_display_stop();
g_free(x509_key_file);
g_free(x509_cert_file);
OpenPOWER on IntegriCloud