[Spice-devel] [spice PATCH 5.5/55] spice_server_vm_start/stop: notify red_dispatcher on vm start/stop
Yonit Halperin
yhalperi at redhat.com
Mon Aug 20 05:45:27 PDT 2012
Till now, red_worker was notfied about vm status changes via QXLWorker->start/stop
(or spice_qxl_start/stop).
Newer qemu, that supports calling spice_server_vm_start/stop, will call only
these routines, and won't call QXLWorker->start/stop.
---
addition patch to the seamless migration series
server/red_dispatcher.c | 22 ++++++++++++++++++++++
server/red_dispatcher.h | 2 ++
server/reds.c | 2 ++
server/spice.h | 6 ++++--
4 files changed, 30 insertions(+), 2 deletions(-)
diff --git a/server/red_dispatcher.c b/server/red_dispatcher.c
index 8d9c073..69d4f0a 100644
--- a/server/red_dispatcher.c
+++ b/server/red_dispatcher.c
@@ -762,6 +762,28 @@ void red_dispatcher_set_mouse_mode(uint32_t mode)
}
}
+void red_dispatcher_on_vm_stop(void)
+{
+ RedDispatcher *now = dispatchers;
+
+ spice_debug(NULL);
+ while (now) {
+ red_dispatcher_stop(now);
+ now = now->next;
+ }
+}
+
+void red_dispatcher_on_vm_start(void)
+{
+ RedDispatcher *now = dispatchers;
+
+ spice_debug(NULL);
+ while (now) {
+ red_dispatcher_start(now);
+ now = now->next;
+ }
+}
+
int red_dispatcher_count(void)
{
RedDispatcher *now = dispatchers;
diff --git a/server/red_dispatcher.h b/server/red_dispatcher.h
index 98f8cea..7e9ffe6 100644
--- a/server/red_dispatcher.h
+++ b/server/red_dispatcher.h
@@ -27,6 +27,8 @@ void red_dispatcher_set_mm_time(uint32_t);
void red_dispatcher_on_ic_change(void);
void red_dispatcher_on_sv_change(void);
void red_dispatcher_set_mouse_mode(uint32_t mode);
+void red_dispatcher_on_vm_stop(void);
+void red_dispatcher_on_vm_start(void);
int red_dispatcher_count(void);
int red_dispatcher_add_renderer(const char *name);
uint32_t red_dispatcher_qxl_ram_size(void);
diff --git a/server/reds.c b/server/reds.c
index b0c609f..416dff4 100644
--- a/server/reds.c
+++ b/server/reds.c
@@ -4041,6 +4041,7 @@ SPICE_GNUC_VISIBLE void spice_server_vm_start(SpiceServer *s)
st_item = SPICE_CONTAINEROF(item, SpiceCharDeviceStateItem, link);
spice_char_device_start(st_item->st);
}
+ red_dispatcher_on_vm_start();
}
SPICE_GNUC_VISIBLE void spice_server_vm_stop(SpiceServer *s)
@@ -4055,6 +4056,7 @@ SPICE_GNUC_VISIBLE void spice_server_vm_stop(SpiceServer *s)
st_item = SPICE_CONTAINEROF(item, SpiceCharDeviceStateItem, link);
spice_char_device_stop(st_item->st);
}
+ red_dispatcher_on_vm_stop();
}
ssize_t reds_stream_read(RedsStream *s, void *buf, size_t nbyte)
diff --git a/server/spice.h b/server/spice.h
index 5f82ed5..fb51a47 100644
--- a/server/spice.h
+++ b/server/spice.h
@@ -134,8 +134,10 @@ struct QXLWorker {
void spice_qxl_wakeup(QXLInstance *instance);
void spice_qxl_oom(QXLInstance *instance);
-void spice_qxl_start(QXLInstance *instance);
-void spice_qxl_stop(QXLInstance *instance);
+void spice_qxl_start(QXLInstance *instance); /* deprecated since 0.11.2
+ spice_server_vm_start replaces it */
+void spice_qxl_stop(QXLInstance *instance); /* deprecated since 0.11.2
+ spice_server_vm_stop replaces it */
void spice_qxl_update_area(QXLInstance *instance, uint32_t surface_id,
struct QXLRect *area, struct QXLRect *dirty_rects,
uint32_t num_dirty_rects, uint32_t clear_dirty_region);
--
1.7.7.6
More information about the Spice-devel
mailing list