diff options
Diffstat (limited to 'server')
-rw-r--r-- | server/red_dispatcher.c | 15 | ||||
-rw-r--r-- | server/red_dispatcher.h | 3 | ||||
-rw-r--r-- | server/red_worker.c | 12 | ||||
-rw-r--r-- | server/red_worker.h | 1 | ||||
-rw-r--r-- | server/spice-server.syms | 5 | ||||
-rw-r--r-- | server/spice.h | 4 |
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; |