958e1b
From 4997362f21fdf91a47dbcce2c8c27fcad673d21a Mon Sep 17 00:00:00 2001
958e1b
From: Gerd Hoffmann <kraxel@redhat.com>
958e1b
Date: Fri, 5 Sep 2014 12:30:37 +0200
958e1b
Subject: [PATCH 03/12] spice: stop server for qxl hard reset
958e1b
958e1b
Message-id: <1409920238-9070-4-git-send-email-kraxel@redhat.com>
958e1b
Patchwork-id: 60876
958e1b
O-Subject: [RHEL-7.1 qemu-kvm PATCH 3/4] spice: stop server for qxl hard reset
958e1b
Bugzilla: 1054077
958e1b
RH-Acked-by: Paolo Bonzini <pbonzini@redhat.com>
958e1b
RH-Acked-by: Laszlo Ersek <lersek@redhat.com>
958e1b
RH-Acked-by: Dr. David Alan Gilbert (git) <dgilbert@redhat.com>
958e1b
958e1b
Hard reset can happen at any time.  We should be able to put qxl into a
958e1b
known-good state no matter what.  Stop spice server thread for reset so
958e1b
it can't be confused by fetching stale commands lingering around in the
958e1b
rings while we reset is ongoing.
958e1b
958e1b
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
958e1b
(cherry picked from commit 75c70e37bc4a6bdc394b4d1b163fe730abb82c72)
958e1b
---
958e1b
 hw/display/qxl.c | 10 ++++++++++
958e1b
 1 file changed, 10 insertions(+)
958e1b
958e1b
Signed-off-by: Miroslav Rezanina <mrezanin@redhat.com>
958e1b
---
958e1b
 hw/display/qxl.c |   10 ++++++++++
958e1b
 1 files changed, 10 insertions(+), 0 deletions(-)
958e1b
958e1b
diff --git a/hw/display/qxl.c b/hw/display/qxl.c
958e1b
index 4fe4f1b..6f8adc8 100644
958e1b
--- a/hw/display/qxl.c
958e1b
+++ b/hw/display/qxl.c
958e1b
@@ -1146,8 +1146,14 @@ static void qxl_soft_reset(PCIQXLDevice *d)
958e1b
 
958e1b
 static void qxl_hard_reset(PCIQXLDevice *d, int loadvm)
958e1b
 {
958e1b
+    bool startstop = qemu_spice_display_is_running(&d->ssd);
958e1b
+
958e1b
     trace_qxl_hard_reset(d->id, loadvm);
958e1b
 
958e1b
+    if (startstop) {
958e1b
+        qemu_spice_display_stop();
958e1b
+    }
958e1b
+
958e1b
     qxl_spice_reset_cursor(d);
958e1b
     qxl_spice_reset_image_cache(d);
958e1b
     qxl_reset_surfaces(d);
958e1b
@@ -1161,6 +1167,10 @@ static void qxl_hard_reset(PCIQXLDevice *d, int loadvm)
958e1b
     }
958e1b
     qemu_spice_create_host_memslot(&d->ssd);
958e1b
     qxl_soft_reset(d);
958e1b
+
958e1b
+    if (startstop) {
958e1b
+        qemu_spice_display_start();
958e1b
+    }
958e1b
 }
958e1b
 
958e1b
 static void qxl_reset_handler(DeviceState *dev)
958e1b
-- 
958e1b
1.7.1
958e1b