Patchwork qxl: upon reset, if spice worker is stopped, the command rings can be not empty

login
register
mail settings
Submitter Yonit Halperin
Date July 12, 2011, 8:51 a.m.
Message ID <1310460718-19184-1-git-send-email-yhalperi@redhat.com>
Download mbox | patch
Permalink /patch/104329/
State New
Headers show

Comments

Yonit Halperin - July 12, 2011, 8:51 a.m.
Spice worker does no longer process commands when it is stopped.
Otherwise, it might crash during migration when attempting to process
commands while the guest is not completely loaded.

Cc: Alon Levy <alevy@redhat.com>
---
 hw/qxl.c |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)
Gerd Hoffmann - July 14, 2011, 8:31 a.m.
On 07/12/11 10:51, Yonit Halperin wrote:
> Spice worker does no longer process commands when it is stopped.
> Otherwise, it might crash during migration when attempting to process
> commands while the guest is not completely loaded.
>
> Cc: Alon Levy<alevy@redhat.com>
> ---
>   hw/qxl.c |    4 ++--
>   1 files changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/hw/qxl.c b/hw/qxl.c
> index 0b9a4c7..a6fb7f0 100644
> --- a/hw/qxl.c
> +++ b/hw/qxl.c
> @@ -656,8 +656,8 @@ static void qxl_reset_state(PCIQXLDevice *d)
>       QXLRam *ram = d->ram;
>       QXLRom *rom = d->rom;
>
> -    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));
>       d->shadow_rom.update_id = cpu_to_le32(0);
>       *rom = d->shadow_rom;
>       qxl_rom_set_dirty(d);

Patch added to spice patch queue.

thanks,
   Gerd

Patch

diff --git a/hw/qxl.c b/hw/qxl.c
index 0b9a4c7..a6fb7f0 100644
--- a/hw/qxl.c
+++ b/hw/qxl.c
@@ -656,8 +656,8 @@  static void qxl_reset_state(PCIQXLDevice *d)
     QXLRam *ram = d->ram;
     QXLRom *rom = d->rom;
 
-    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));
     d->shadow_rom.update_id = cpu_to_le32(0);
     *rom = d->shadow_rom;
     qxl_rom_set_dirty(d);