From 8cdd46df6ed8a98f84078b0dd630be2ead26560f Mon Sep 17 00:00:00 2001 Message-Id: <8cdd46df6ed8a98f84078b0dd630be2ead26560f.1346761472.git.minovotn@redhat.com> In-Reply-To: <66350080c56dd39cd894591e70182434d5d2de75.1346761472.git.minovotn@redhat.com> References: <66350080c56dd39cd894591e70182434d5d2de75.1346761472.git.minovotn@redhat.com> From: Yonit Halperin Date: Sun, 26 Aug 2012 09:54:08 +0200 Subject: [PATCH 05/10] spice: notify on vm state change only via spice_server_vm_start/stop RH-Author: Yonit Halperin Message-id: <1345974852-592-2-git-send-email-yhalperi@redhat.com> Patchwork-id: 41270 O-Subject: [PATCH 2/6] spice: notify on vm state change only via spice_server_vm_start/stop Bugzilla: 836133 RH-Acked-by: Gerd Hoffmann RH-Acked-by: Alon Levy RH-Acked-by: Uri Lublin QXLWorker->start/stop are deprecated since spice-server 0.11.2 Signed-off-by: Yonit Halperin --- hw/qxl.c | 7 ++++--- ui/spice-core.c | 3 +++ ui/spice-display.c | 32 ++++++++++++++++++++++++++++++-- ui/spice-display.h | 9 +++++++-- 4 files changed, 44 insertions(+), 7 deletions(-) Signed-off-by: Michal Novotny --- hw/qxl.c | 7 ++++--- ui/spice-core.c | 3 +++ ui/spice-display.c | 32 ++++++++++++++++++++++++++++++-- ui/spice-display.h | 9 +++++++-- 4 files changed, 44 insertions(+), 7 deletions(-) diff --git a/hw/qxl.c b/hw/qxl.c index 94beab2..0647bf2 100644 --- a/hw/qxl.c +++ b/hw/qxl.c @@ -906,9 +906,10 @@ static void qxl_write_config(PCIDevice *d, uint32_t address, static void qxl_check_state(PCIQXLDevice *d) { QXLRam *ram = d->ram; + int spice_display_running = qemu_spice_display_is_running(&d->ssd); - assert(!d->ssd.running || SPICE_RING_IS_EMPTY(&ram->cmd_ring)); - assert(!d->ssd.running || SPICE_RING_IS_EMPTY(&ram->cursor_ring)); + assert(!spice_display_running || SPICE_RING_IS_EMPTY(&ram->cmd_ring)); + assert(!spice_display_running || SPICE_RING_IS_EMPTY(&ram->cursor_ring)); } static void qxl_reset_state(PCIQXLDevice *d) @@ -1470,7 +1471,7 @@ static void qxl_send_events(PCIQXLDevice *d, uint32_t events) uint32_t old_pending; uint32_t le_events = cpu_to_le32(events); - assert(d->ssd.running); + assert(qemu_spice_display_is_running(&d->ssd)); old_pending = __sync_fetch_and_or(&d->ram->int_pending, le_events); if ((old_pending & le_events) == le_events) { return; diff --git a/ui/spice-core.c b/ui/spice-core.c index 1702aa0..5c7ce34 100644 --- a/ui/spice-core.c +++ b/ui/spice-core.c @@ -36,6 +36,7 @@ #include "monitor.h" #include "hw/hw.h" #include "sysemu.h" +#include "spice-display.h" /* core bits */ @@ -591,9 +592,11 @@ static void vm_change_state_handler(void *opaque, int running, { #if SPICE_SERVER_VERSION >= 0x000b02 /* 0.11.2 */ if (running) { + qemu_spice_display_start(); spice_server_vm_start(spice_server); } else { spice_server_vm_stop(spice_server); + qemu_spice_display_stop(); } #endif } diff --git a/ui/spice-display.c b/ui/spice-display.c index 2fe1ba9..7028f17 100644 --- a/ui/spice-display.c +++ b/ui/spice-display.c @@ -121,16 +121,42 @@ void qemu_spice_wakeup(SimpleSpiceDisplay *ssd) ssd->worker->wakeup(ssd->worker); } -void qemu_spice_start(SimpleSpiceDisplay *ssd) +#if SPICE_SERVER_VERSION < 0x000b02 /* before 0.11.2 */ +static void qemu_spice_start(SimpleSpiceDisplay *ssd) { ssd->worker->start(ssd->worker); } -void qemu_spice_stop(SimpleSpiceDisplay *ssd) +static void qemu_spice_stop(SimpleSpiceDisplay *ssd) { ssd->worker->stop(ssd->worker); } +#else + +static int spice_display_is_running; + +void qemu_spice_display_start(void) +{ + spice_display_is_running = true; +} + +void qemu_spice_display_stop(void) +{ + spice_display_is_running = false; +} + +#endif + +int qemu_spice_display_is_running(SimpleSpiceDisplay *ssd) +{ +#if SPICE_SERVER_VERSION < 0x000b02 /* before 0.11.2 */ + return ssd->running; +#else + return spice_display_is_running; +#endif +} + static SimpleSpiceUpdate *qemu_spice_create_update(SimpleSpiceDisplay *ssd) { SimpleSpiceUpdate *update; @@ -258,6 +284,7 @@ void qemu_spice_destroy_host_primary(SimpleSpiceDisplay *ssd) void qemu_spice_vm_change_state_handler(void *opaque, int running, RunState state) { +#if SPICE_SERVER_VERSION < 0x000b02 /* before 0.11.2 */ SimpleSpiceDisplay *ssd = opaque; if (running) { @@ -267,6 +294,7 @@ void qemu_spice_vm_change_state_handler(void *opaque, int running, qemu_spice_stop(ssd); ssd->running = false; } +#endif } void qemu_spice_display_init_common(SimpleSpiceDisplay *ssd, DisplayState *ds) diff --git a/ui/spice-display.h b/ui/spice-display.h index 0496c8e..02e742f 100644 --- a/ui/spice-display.h +++ b/ui/spice-display.h @@ -82,7 +82,9 @@ struct SimpleSpiceDisplay { QXLRect dirty; int notify; +#if SPICE_SERVER_VERSION < 0x000b02 /* before 0.11.2 */ int running; +#endif /* * All struct members below this comment can be accessed from @@ -129,5 +131,8 @@ void qemu_spice_create_primary_surface(SimpleSpiceDisplay *ssd, uint32_t id, void qemu_spice_destroy_primary_surface(SimpleSpiceDisplay *ssd, uint32_t id, qxl_async_io async); void qemu_spice_wakeup(SimpleSpiceDisplay *ssd); -void qemu_spice_start(SimpleSpiceDisplay *ssd); -void qemu_spice_stop(SimpleSpiceDisplay *ssd); +#if SPICE_SERVER_VERSION >= 0x000b02 /* before 0.11.2 */ +void qemu_spice_display_start(void); +void qemu_spice_display_stop(void); +#endif +int qemu_spice_display_is_running(SimpleSpiceDisplay *ssd); -- 1.7.11.4