From be48e9951214a78ebef025cefecfc77be3d1c13c Mon Sep 17 00:00:00 2001 From: Yonit Halperin Date: Tue, 9 Aug 2011 16:12:40 +0300 Subject: qxl: allowing the command rings to be not empty when spice worker is stopped RHBZ #728984 same as 8927cfbba232e28304734f7afd463c1b84134031, but for qxl_check_state, that was triggered by qxl_pre_load (which calls qxl_hard_reset, which calls qxl_soft_reset), and caused the migration target to crash. Signed-off-by: Gerd Hoffmann --- hw/qxl.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) (limited to 'hw') diff --git a/hw/qxl.c b/hw/qxl.c index db7ae7a..7991e70 100644 --- a/hw/qxl.c +++ b/hw/qxl.c @@ -821,17 +821,15 @@ static void qxl_check_state(PCIQXLDevice *d) { QXLRam *ram = d->ram; - assert(SPICE_RING_IS_EMPTY(&ram->cmd_ring)); - assert(SPICE_RING_IS_EMPTY(&ram->cursor_ring)); + assert(!d->ssd.running || SPICE_RING_IS_EMPTY(&ram->cmd_ring)); + assert(!d->ssd.running || SPICE_RING_IS_EMPTY(&ram->cursor_ring)); } static void qxl_reset_state(PCIQXLDevice *d) { - QXLRam *ram = d->ram; QXLRom *rom = d->rom; - assert(!d->ssd.running || SPICE_RING_IS_EMPTY(&ram->cmd_ring)); - assert(!d->ssd.running || SPICE_RING_IS_EMPTY(&ram->cursor_ring)); + qxl_check_state(d); d->shadow_rom.update_id = cpu_to_le32(0); *rom = d->shadow_rom; qxl_rom_set_dirty(d); -- cgit v1.1 From c5f3dabba974aeea36726aaf5a7a5509ee705370 Mon Sep 17 00:00:00 2001 From: Alon Levy Date: Tue, 9 Aug 2011 23:53:34 +0300 Subject: qxl: unbreak after memory API conversion Break is only noticable with newer spice-server library (0.8.2 release or 0.9.0 and newer on master branch). ioport_write's val was changed from uint32_t to uint64_t, this broke two printfs. Use PRId64 instead of %d. Signed-off-by: Alon Levy Signed-off-by: Gerd Hoffmann --- hw/qxl.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'hw') diff --git a/hw/qxl.c b/hw/qxl.c index 7991e70..b34bccf 100644 --- a/hw/qxl.c +++ b/hw/qxl.c @@ -1187,7 +1187,7 @@ async_common: } d->current_async = orig_io_port; qemu_mutex_unlock(&d->async_lock); - dprint(d, 2, "start async %d (%d)\n", io_port, val); + dprint(d, 2, "start async %d (%"PRId64")\n", io_port, val); break; default: break; @@ -1303,7 +1303,8 @@ async_common: break; } case QXL_IO_FLUSH_SURFACES_ASYNC: - dprint(d, 1, "QXL_IO_FLUSH_SURFACES_ASYNC (%d) (%s, s#=%d, res#=%d)\n", + dprint(d, 1, "QXL_IO_FLUSH_SURFACES_ASYNC" + " (%"PRId64") (%s, s#=%d, res#=%d)\n", val, qxl_mode_to_string(d->mode), d->guest_surfaces.count, d->num_free_res); qxl_spice_flush_surfaces_async(d); -- cgit v1.1