summaryrefslogtreecommitdiffstats
path: root/server
diff options
context:
space:
mode:
Diffstat (limited to 'server')
-rw-r--r--server/red_dispatcher.c15
-rw-r--r--server/red_dispatcher.h3
-rw-r--r--server/red_worker.c12
-rw-r--r--server/red_worker.h1
-rw-r--r--server/spice-server.syms5
-rw-r--r--server/spice.h4
6 files changed, 39 insertions, 1 deletions
diff --git a/server/red_dispatcher.c b/server/red_dispatcher.c
index e054b5a6..f4b140c2 100644
--- a/server/red_dispatcher.c
+++ b/server/red_dispatcher.c
@@ -705,6 +705,15 @@ static void red_dispatcher_monitors_config_async(RedDispatcher *dispatcher,
dispatcher_send_message(&dispatcher->dispatcher, message, &payload);
}
+static void red_dispatcher_driver_unload(RedDispatcher *dispatcher)
+{
+ RedWorkerMessageDriverUnload payload;
+
+ dispatcher_send_message(&dispatcher->dispatcher,
+ RED_WORKER_MESSAGE_DRIVER_UNLOAD,
+ &payload);
+}
+
static void red_dispatcher_stop(RedDispatcher *dispatcher)
{
RedWorkerMessageStop payload;
@@ -994,6 +1003,12 @@ void spice_qxl_monitors_config_async(QXLInstance *instance, QXLPHYSICAL monitors
red_dispatcher_monitors_config_async(instance->st->dispatcher, monitors_config, group_id, cookie);
}
+SPICE_GNUC_VISIBLE
+void spice_qxl_driver_unload(QXLInstance *instance)
+{
+ red_dispatcher_driver_unload(instance->st->dispatcher);
+}
+
void red_dispatcher_async_complete(struct RedDispatcher *dispatcher,
AsyncCommand *async_command)
{
diff --git a/server/red_dispatcher.h b/server/red_dispatcher.h
index 17eeb291..4d0d2a8c 100644
--- a/server/red_dispatcher.h
+++ b/server/red_dispatcher.h
@@ -201,4 +201,7 @@ typedef struct RedWorkerMessageMonitorsConfigAsync {
int group_id;
} RedWorkerMessageMonitorsConfigAsync;
+typedef struct RedWorkerMessageDriverUnload {
+} RedWorkerMessageDriverUnload;
+
#endif
diff --git a/server/red_worker.c b/server/red_worker.c
index 4c9a7b01..8ba8070a 100644
--- a/server/red_worker.c
+++ b/server/red_worker.c
@@ -11864,6 +11864,13 @@ void handle_dev_reset_memslots(void *opaque, void *payload)
red_memslot_info_reset(&worker->mem_slots);
}
+void handle_dev_driver_unload(void *opaque, void *payload)
+{
+ RedWorker *worker = opaque;
+
+ worker->driver_has_monitors_config = 0;
+}
+
void handle_dev_loadvm_commands(void *opaque, void *payload)
{
RedWorkerMessageLoadvmCommands *msg = payload;
@@ -12087,6 +12094,11 @@ static void register_callbacks(Dispatcher *dispatcher)
handle_dev_monitors_config_async,
sizeof(RedWorkerMessageMonitorsConfigAsync),
DISPATCHER_ASYNC);
+ dispatcher_register_handler(dispatcher,
+ RED_WORKER_MESSAGE_DRIVER_UNLOAD,
+ handle_dev_driver_unload,
+ sizeof(RedWorkerMessageDriverUnload),
+ DISPATCHER_NONE);
}
diff --git a/server/red_worker.h b/server/red_worker.h
index 6c5b839f..796b0902 100644
--- a/server/red_worker.h
+++ b/server/red_worker.h
@@ -86,6 +86,7 @@ enum {
RED_WORKER_MESSAGE_CURSOR_CHANNEL_CREATE,
RED_WORKER_MESSAGE_MONITORS_CONFIG_ASYNC,
+ RED_WORKER_MESSAGE_DRIVER_UNLOAD,
RED_WORKER_MESSAGE_COUNT // LAST
};
diff --git a/server/spice-server.syms b/server/spice-server.syms
index 2091fe04..53edd17a 100644
--- a/server/spice-server.syms
+++ b/server/spice-server.syms
@@ -135,3 +135,8 @@ SPICE_SERVER_0.12.2 {
global:
spice_server_port_event;
} SPICE_SERVER_0.11.4;
+
+SPICE_SERVER_0.12.3 {
+global:
+ spice_qxl_driver_unload;
+} SPICE_SERVER_0.12.2;
diff --git a/server/spice.h b/server/spice.h
index 45b7408c..18bd11a6 100644
--- a/server/spice.h
+++ b/server/spice.h
@@ -23,7 +23,7 @@
#include <spice/qxl_dev.h>
#include <spice/vd_agent.h>
-#define SPICE_SERVER_VERSION 0x000c02 /* release 0.12.2 */
+#define SPICE_SERVER_VERSION 0x000c03 /* release 0.12.3 */
/* interface base type */
@@ -167,6 +167,8 @@ void spice_qxl_flush_surfaces_async(QXLInstance *instance, uint64_t cookie);
/* since spice 0.12.0 */
void spice_qxl_monitors_config_async(QXLInstance *instance, QXLPHYSICAL monitors_config,
int group_id, uint64_t cookie);
+/* since spice 0.12.3 */
+void spice_qxl_driver_unload(QXLInstance *instance);
typedef struct QXLDrawArea {
uint8_t *buf;