[Spice-commits] 3 commits - server/red-qxl.c server/red-replay-qxl.c server/spice-qxl.h server/spice-replay.h server/tests

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Thu Apr 16 10:29:11 UTC 2020


 server/red-qxl.c                 |  426 ++++++++-------------------------------
 server/red-replay-qxl.c          |   18 -
 server/spice-qxl.h               |   29 --
 server/spice-replay.h            |    2 
 server/tests/replay.c            |    8 
 server/tests/test-display-base.c |    4 
 6 files changed, 107 insertions(+), 380 deletions(-)

New commits:
commit 974692bda1e77af92b71ed43b022439448492cb9
Author: Frediano Ziglio <fziglio at redhat.com>
Date:   Wed Mar 18 06:23:30 2020 +0000

    spice-qxl: Fix typo in callback name and remove obsolete parameter
    
    attache_worker was always spelled wrongly.
    Use anonymous union (standard feature already used in different
    code in SPICE) to have an aliased attached_worker function.
    Also removed a parameter from this new callback and deprecate
    the old.
    Due to C ABI removing a parameter is not an issue,
    red-qxl.c:red_qxl_attach_worker will continue to pass the parameter,
    new code will ignore, old code will receive it.
    
    Signed-off-by: Frediano Ziglio <fziglio at redhat.com>

diff --git a/server/spice-qxl.h b/server/spice-qxl.h
index b0dce2c6..bc02e2ee 100644
--- a/server/spice-qxl.h
+++ b/server/spice-qxl.h
@@ -185,7 +185,10 @@ struct QXLDevSurfaceCreate {
 struct QXLInterface {
     SpiceBaseInterface base;
 
-    void (*attache_worker)(QXLInstance *qin, QXLWorker *qxl_worker);
+    union {
+        void (*attache_worker)(QXLInstance *qin, QXLWorker *qxl_worker) SPICE_GNUC_DEPRECATED;
+        void (*attached_worker)(QXLInstance *qin);
+    };
     void (*set_compression_level)(QXLInstance *qin, int level);
     void (*set_mm_time)(QXLInstance *qin, uint32_t mm_time) SPICE_GNUC_DEPRECATED;
 
diff --git a/server/tests/replay.c b/server/tests/replay.c
index 071c87f1..30dee8b0 100644
--- a/server/tests/replay.c
+++ b/server/tests/replay.c
@@ -73,7 +73,7 @@ static QXLDevMemSlot slot = {
 .qxl_ram_size = ~0,
 };
 
-static void attach_worker(QXLInstance *qin, SPICE_GNUC_UNUSED QXLWorker *_qxl_worker)
+static void attached_worker(QXLInstance *qin)
 {
     static int count = 0;
     if (++count > 1) {
@@ -250,7 +250,7 @@ static QXLInterface display_sif = {
         .major_version = SPICE_INTERFACE_QXL_MAJOR,
         .minor_version = SPICE_INTERFACE_QXL_MINOR
     },
-    .attache_worker = attach_worker,
+    .attached_worker = attached_worker,
     .set_compression_level = set_compression_level,
     .get_init_info = get_init_info,
     .get_command = get_display_command,
diff --git a/server/tests/test-display-base.c b/server/tests/test-display-base.c
index 54881649..d0e08133 100644
--- a/server/tests/test-display-base.c
+++ b/server/tests/test-display-base.c
@@ -423,7 +423,7 @@ static QXLDevMemSlot slot = {
 .qxl_ram_size = ~0,
 };
 
-static void attache_worker(QXLInstance *qin, SPICE_GNUC_UNUSED QXLWorker *_qxl_worker)
+static void attached_worker(QXLInstance *qin)
 {
     Test *test = SPICE_CONTAINEROF(qin, Test, qxl_instance);
 
@@ -797,7 +797,7 @@ static QXLInterface display_sif = {
         .major_version = SPICE_INTERFACE_QXL_MAJOR,
         .minor_version = SPICE_INTERFACE_QXL_MINOR
     },
-    .attache_worker = attache_worker,
+    .attached_worker = attached_worker,
     .set_compression_level = set_compression_level,
     .get_init_info = get_init_info,
 
commit 68264872372853a44307bb055bf3bb295b47266c
Author: Frediano Ziglio <fziglio at redhat.com>
Date:   Wed Mar 18 01:20:25 2020 +0000

    red-qxl: Avoid function that just call another static function
    
    Inline the function directly, avoid useless function and developers
    having to go up and down the code just to understand what these
    function do.
    
    Signed-off-by: Frediano Ziglio <fziglio at redhat.com>

diff --git a/server/red-qxl.c b/server/red-qxl.c
index 8e123383..e142e4c9 100644
--- a/server/red-qxl.c
+++ b/server/red-qxl.c
@@ -86,9 +86,10 @@ int red_qxl_check_qxl_version(QXLInstance *qxl, int major, int minor)
             ((qxl_major == major) && (qxl_minor >= minor)));
 }
 
-static void red_qxl_update_area(QXLState *qxl_state, uint32_t surface_id,
-                                QXLRect *qxl_area, QXLRect *qxl_dirty_rects,
-                                uint32_t num_dirty_rects, uint32_t clear_dirty_region)
+SPICE_GNUC_VISIBLE
+void spice_qxl_update_area(QXLInstance *instance, uint32_t surface_id,
+                    struct QXLRect *qxl_area, struct QXLRect *qxl_dirty_rects,
+                    uint32_t num_dirty_rects, uint32_t clear_dirty_region)
 {
     RedWorkerMessageUpdate payload = {0,};
 
@@ -97,7 +98,7 @@ static void red_qxl_update_area(QXLState *qxl_state, uint32_t surface_id,
     payload.qxl_dirty_rects = qxl_dirty_rects;
     payload.num_dirty_rects = num_dirty_rects;
     payload.clear_dirty_region = clear_dirty_region;
-    dispatcher_send_message(qxl_state->dispatcher,
+    dispatcher_send_message(instance->st->dispatcher,
                             RED_WORKER_MESSAGE_UPDATE,
                             &payload);
 }
@@ -110,11 +111,9 @@ gboolean red_qxl_client_monitors_config(QXLInstance *qxl,
         qxl_get_interface(qxl)->client_monitors_config(qxl, monitors_config));
 }
 
-static void red_qxl_update_area_async(QXLState *qxl_state,
-                                      uint32_t surface_id,
-                                      QXLRect *qxl_area,
-                                      uint32_t clear_dirty_region,
-                                      uint64_t cookie)
+SPICE_GNUC_VISIBLE
+void spice_qxl_update_area_async(QXLInstance *instance, uint32_t surface_id, QXLRect *qxl_area,
+                                 uint32_t clear_dirty_region, uint64_t cookie)
 {
     RedWorkerMessage message = RED_WORKER_MESSAGE_UPDATE_ASYNC;
     RedWorkerMessageUpdateAsync payload;
@@ -123,57 +122,62 @@ static void red_qxl_update_area_async(QXLState *qxl_state,
     payload.surface_id = surface_id;
     payload.qxl_area = *qxl_area;
     payload.clear_dirty_region = clear_dirty_region;
-    dispatcher_send_message(qxl_state->dispatcher,
+    dispatcher_send_message(instance->st->dispatcher,
                             message,
                             &payload);
 }
 
-static void red_qxl_add_memslot(QXLState *qxl_state, QXLDevMemSlot *mem_slot)
+SPICE_GNUC_VISIBLE
+void spice_qxl_add_memslot(QXLInstance *instance, QXLDevMemSlot *mem_slot)
 {
     RedWorkerMessageAddMemslot payload;
 
     payload.mem_slot = *mem_slot;
-    dispatcher_send_message(qxl_state->dispatcher,
+    dispatcher_send_message(instance->st->dispatcher,
                             RED_WORKER_MESSAGE_ADD_MEMSLOT,
                             &payload);
 }
 
-static void red_qxl_add_memslot_async(QXLState *qxl_state, QXLDevMemSlot *mem_slot, uint64_t cookie)
+SPICE_GNUC_VISIBLE
+void spice_qxl_add_memslot_async(QXLInstance *instance, QXLDevMemSlot *mem_slot, uint64_t cookie)
 {
     RedWorkerMessageAddMemslotAsync payload;
     RedWorkerMessage message = RED_WORKER_MESSAGE_ADD_MEMSLOT_ASYNC;
 
     payload.base.cookie = cookie;
     payload.mem_slot = *mem_slot;
-    dispatcher_send_message(qxl_state->dispatcher, message, &payload);
+    dispatcher_send_message(instance->st->dispatcher, message, &payload);
 }
 
-static void red_qxl_del_memslot(QXLState *qxl_state, uint32_t slot_group_id, uint32_t slot_id)
+SPICE_GNUC_VISIBLE
+void spice_qxl_del_memslot(QXLInstance *instance, uint32_t slot_group_id, uint32_t slot_id)
 {
     RedWorkerMessageDelMemslot payload;
     RedWorkerMessage message = RED_WORKER_MESSAGE_DEL_MEMSLOT;
 
     payload.slot_group_id = slot_group_id;
     payload.slot_id = slot_id;
-    dispatcher_send_message(qxl_state->dispatcher, message, &payload);
+    dispatcher_send_message(instance->st->dispatcher, message, &payload);
 }
 
-static void red_qxl_destroy_surfaces(QXLState *qxl_state)
+SPICE_GNUC_VISIBLE
+void spice_qxl_destroy_surfaces(QXLInstance *instance)
 {
     RedWorkerMessageDestroySurfaces payload;
 
-    dispatcher_send_message(qxl_state->dispatcher,
+    dispatcher_send_message(instance->st->dispatcher,
                             RED_WORKER_MESSAGE_DESTROY_SURFACES,
                             &payload);
 }
 
-static void red_qxl_destroy_surfaces_async(QXLState *qxl_state, uint64_t cookie)
+SPICE_GNUC_VISIBLE
+void spice_qxl_destroy_surfaces_async(QXLInstance *instance, uint64_t cookie)
 {
     RedWorkerMessageDestroySurfacesAsync payload;
     RedWorkerMessage message = RED_WORKER_MESSAGE_DESTROY_SURFACES_ASYNC;
 
     payload.base.cookie = cookie;
-    dispatcher_send_message(qxl_state->dispatcher, message, &payload);
+    dispatcher_send_message(instance->st->dispatcher, message, &payload);
 }
 
 /* used by RedWorker */
@@ -187,39 +191,27 @@ void red_qxl_destroy_primary_surface_complete(QXLState *qxl_state)
     reds_update_client_mouse_allowed(qxl_state->reds);
 }
 
-static void
-red_qxl_destroy_primary_surface_sync(QXLState *qxl_state,
-                                     uint32_t surface_id)
+SPICE_GNUC_VISIBLE
+void spice_qxl_destroy_primary_surface(QXLInstance *instance, uint32_t surface_id)
 {
     RedWorkerMessageDestroyPrimarySurface payload;
     payload.surface_id = surface_id;
-    dispatcher_send_message(qxl_state->dispatcher,
+    dispatcher_send_message(instance->st->dispatcher,
                             RED_WORKER_MESSAGE_DESTROY_PRIMARY_SURFACE,
                             &payload);
-    red_qxl_destroy_primary_surface_complete(qxl_state);
+    red_qxl_destroy_primary_surface_complete(instance->st);
 }
 
-static void
-red_qxl_destroy_primary_surface_async(QXLState *qxl_state,
-                                      uint32_t surface_id, uint64_t cookie)
+SPICE_GNUC_VISIBLE
+void spice_qxl_destroy_primary_surface_async(QXLInstance *instance,
+                                             uint32_t surface_id, uint64_t cookie)
 {
     RedWorkerMessageDestroyPrimarySurfaceAsync payload;
     RedWorkerMessage message = RED_WORKER_MESSAGE_DESTROY_PRIMARY_SURFACE_ASYNC;
 
     payload.base.cookie = cookie;
     payload.surface_id = surface_id;
-    dispatcher_send_message(qxl_state->dispatcher, message, &payload);
-}
-
-static void
-red_qxl_destroy_primary_surface(QXLState *qxl_state,
-                                uint32_t surface_id, int async, uint64_t cookie)
-{
-    if (async) {
-        red_qxl_destroy_primary_surface_async(qxl_state, surface_id, cookie);
-    } else {
-        red_qxl_destroy_primary_surface_sync(qxl_state, surface_id);
-    }
+    dispatcher_send_message(instance->st->dispatcher, message, &payload);
 }
 
 /* used by RedWorker */
@@ -234,9 +226,9 @@ void red_qxl_create_primary_surface_complete(QXLState *qxl_state, const QXLDevSu
     reds_update_client_mouse_allowed(qxl_state->reds);
 }
 
-static void
-red_qxl_create_primary_surface_async(QXLState *qxl_state, uint32_t surface_id,
-                                     QXLDevSurfaceCreate *surface, uint64_t cookie)
+SPICE_GNUC_VISIBLE
+void spice_qxl_create_primary_surface_async(QXLInstance *instance, uint32_t surface_id,
+                                            QXLDevSurfaceCreate *surface, uint64_t cookie)
 {
     RedWorkerMessageCreatePrimarySurfaceAsync payload;
     RedWorkerMessage message = RED_WORKER_MESSAGE_CREATE_PRIMARY_SURFACE_ASYNC;
@@ -244,69 +236,71 @@ red_qxl_create_primary_surface_async(QXLState *qxl_state, uint32_t surface_id,
     payload.base.cookie = cookie;
     payload.surface_id = surface_id;
     payload.surface = *surface;
-    dispatcher_send_message(qxl_state->dispatcher, message, &payload);
+    dispatcher_send_message(instance->st->dispatcher, message, &payload);
 }
 
-static void
-red_qxl_create_primary_surface_sync(QXLState *qxl_state, uint32_t surface_id,
-                                    QXLDevSurfaceCreate *surface)
+SPICE_GNUC_VISIBLE
+void spice_qxl_create_primary_surface(QXLInstance *instance, uint32_t surface_id,
+                                QXLDevSurfaceCreate *surface)
 {
     RedWorkerMessageCreatePrimarySurface payload = {0,};
 
     payload.surface_id = surface_id;
     payload.surface = *surface;
-    dispatcher_send_message(qxl_state->dispatcher,
+    dispatcher_send_message(instance->st->dispatcher,
                             RED_WORKER_MESSAGE_CREATE_PRIMARY_SURFACE,
                             &payload);
-    red_qxl_create_primary_surface_complete(qxl_state, surface);
+    red_qxl_create_primary_surface_complete(instance->st, surface);
 }
 
-static void red_qxl_reset_image_cache(QXLState *qxl_state)
+SPICE_GNUC_VISIBLE
+void spice_qxl_reset_image_cache(QXLInstance *instance)
 {
     RedWorkerMessageResetImageCache payload;
 
-    dispatcher_send_message(qxl_state->dispatcher,
+    dispatcher_send_message(instance->st->dispatcher,
                             RED_WORKER_MESSAGE_RESET_IMAGE_CACHE,
                             &payload);
 }
 
-static void red_qxl_reset_cursor(QXLState *qxl_state)
+SPICE_GNUC_VISIBLE
+void spice_qxl_reset_cursor(QXLInstance *instance)
 {
     RedWorkerMessageResetCursor payload;
 
-    dispatcher_send_message(qxl_state->dispatcher,
+    dispatcher_send_message(instance->st->dispatcher,
                             RED_WORKER_MESSAGE_RESET_CURSOR,
                             &payload);
 }
 
-static void red_qxl_destroy_surface_wait_sync(QXLState *qxl_state,
-                                              uint32_t surface_id)
+SPICE_GNUC_VISIBLE
+void spice_qxl_destroy_surface_wait(QXLInstance *instance, uint32_t surface_id)
 {
     RedWorkerMessageDestroySurfaceWait payload;
 
     payload.surface_id = surface_id;
-    dispatcher_send_message(qxl_state->dispatcher,
+    dispatcher_send_message(instance->st->dispatcher,
                             RED_WORKER_MESSAGE_DESTROY_SURFACE_WAIT,
                             &payload);
 }
 
-static void red_qxl_destroy_surface_wait_async(QXLState *qxl_state,
-                                               uint32_t surface_id,
-                                               uint64_t cookie)
+SPICE_GNUC_VISIBLE
+void spice_qxl_destroy_surface_async(QXLInstance *instance, uint32_t surface_id, uint64_t cookie)
 {
     RedWorkerMessageDestroySurfaceWaitAsync payload;
     RedWorkerMessage message = RED_WORKER_MESSAGE_DESTROY_SURFACE_WAIT_ASYNC;
 
     payload.base.cookie = cookie;
     payload.surface_id = surface_id;
-    dispatcher_send_message(qxl_state->dispatcher, message, &payload);
+    dispatcher_send_message(instance->st->dispatcher, message, &payload);
 }
 
-static void red_qxl_reset_memslots(QXLState *qxl_state)
+SPICE_GNUC_VISIBLE
+void spice_qxl_reset_memslots(QXLInstance *instance)
 {
     RedWorkerMessageResetMemslots payload;
 
-    dispatcher_send_message(qxl_state->dispatcher,
+    dispatcher_send_message(instance->st->dispatcher,
                             RED_WORKER_MESSAGE_RESET_MEMSLOTS,
                             &payload);
 }
@@ -322,26 +316,28 @@ static bool red_qxl_set_pending(QXLState *qxl_state, int pending)
     return FALSE;
 }
 
-static void red_qxl_wakeup(QXLState *qxl_state)
+SPICE_GNUC_VISIBLE
+void spice_qxl_wakeup(QXLInstance *instance)
 {
     RedWorkerMessageWakeup payload;
 
-    if (red_qxl_set_pending(qxl_state, RED_DISPATCHER_PENDING_WAKEUP))
+    if (red_qxl_set_pending(instance->st, RED_DISPATCHER_PENDING_WAKEUP))
         return;
 
-    dispatcher_send_message(qxl_state->dispatcher,
+    dispatcher_send_message(instance->st->dispatcher,
                             RED_WORKER_MESSAGE_WAKEUP,
                             &payload);
 }
 
-static void red_qxl_oom(QXLState *qxl_state)
+SPICE_GNUC_VISIBLE
+void spice_qxl_oom(QXLInstance *instance)
 {
     RedWorkerMessageOom payload;
 
-    if (red_qxl_set_pending(qxl_state, RED_DISPATCHER_PENDING_OOM))
+    if (red_qxl_set_pending(instance->st, RED_DISPATCHER_PENDING_OOM))
         return;
 
-    dispatcher_send_message(qxl_state->dispatcher,
+    dispatcher_send_message(instance->st->dispatcher,
                             RED_WORKER_MESSAGE_OOM,
                             &payload);
 }
@@ -355,19 +351,19 @@ void red_qxl_start(QXLInstance *qxl)
                             &payload);
 }
 
-static void red_qxl_flush_surfaces_async(QXLState *qxl_state, uint64_t cookie)
+SPICE_GNUC_VISIBLE
+void spice_qxl_flush_surfaces_async(QXLInstance *instance, uint64_t cookie)
 {
     RedWorkerMessageFlushSurfacesAsync payload;
     RedWorkerMessage message = RED_WORKER_MESSAGE_FLUSH_SURFACES_ASYNC;
 
     payload.base.cookie = cookie;
-    dispatcher_send_message(qxl_state->dispatcher, message, &payload);
+    dispatcher_send_message(instance->st->dispatcher, message, &payload);
 }
 
-static void red_qxl_monitors_config_async(QXLState *qxl_state,
-                                          QXLPHYSICAL monitors_config,
-                                          int group_id,
-                                          uint64_t cookie)
+SPICE_GNUC_VISIBLE
+void spice_qxl_monitors_config_async(QXLInstance *instance, QXLPHYSICAL monitors_config,
+                                     int group_id, uint64_t cookie)
 {
     RedWorkerMessageMonitorsConfigAsync payload;
     RedWorkerMessage message = RED_WORKER_MESSAGE_MONITORS_CONFIG_ASYNC;
@@ -375,16 +371,17 @@ static void red_qxl_monitors_config_async(QXLState *qxl_state,
     payload.base.cookie = cookie;
     payload.monitors_config = monitors_config;
     payload.group_id = group_id;
-    payload.max_monitors = qxl_state->max_monitors;
+    payload.max_monitors = instance->st->max_monitors;
 
-    dispatcher_send_message(qxl_state->dispatcher, message, &payload);
+    dispatcher_send_message(instance->st->dispatcher, message, &payload);
 }
 
-static void red_qxl_driver_unload(QXLState *qxl_state)
+SPICE_GNUC_VISIBLE
+void spice_qxl_driver_unload(QXLInstance *instance)
 {
     RedWorkerMessageDriverUnload payload;
 
-    dispatcher_send_message(qxl_state->dispatcher,
+    dispatcher_send_message(instance->st->dispatcher,
                             RED_WORKER_MESSAGE_DRIVER_UNLOAD,
                             &payload);
 }
@@ -398,15 +395,14 @@ void red_qxl_stop(QXLInstance *qxl)
                             &payload);
 }
 
-static void red_qxl_loadvm_commands(QXLState *qxl_state,
-                                    struct QXLCommandExt *ext,
-                                    uint32_t count)
+SPICE_GNUC_VISIBLE
+void spice_qxl_loadvm_commands(QXLInstance *instance, struct QXLCommandExt *ext, uint32_t count)
 {
     RedWorkerMessageLoadvmCommands payload;
 
     payload.count = count;
     payload.ext = ext;
-    dispatcher_send_message(qxl_state->dispatcher,
+    dispatcher_send_message(instance->st->dispatcher,
                             RED_WORKER_MESSAGE_LOADVM_COMMANDS,
                             &payload);
 }
@@ -420,18 +416,6 @@ uint32_t red_qxl_get_ram_size(QXLInstance *qxl)
     return qxl_info.qxl_ram_size;
 }
 
-SPICE_GNUC_VISIBLE
-void spice_qxl_wakeup(QXLInstance *instance)
-{
-    red_qxl_wakeup(instance->st);
-}
-
-SPICE_GNUC_VISIBLE
-void spice_qxl_oom(QXLInstance *instance)
-{
-    red_qxl_oom(instance->st);
-}
-
 SPICE_GNUC_VISIBLE
 void spice_qxl_start(QXLInstance *instance)
 {
@@ -444,140 +428,12 @@ void spice_qxl_stop(QXLInstance *instance)
     red_qxl_stop(instance);
 }
 
-SPICE_GNUC_VISIBLE
-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)
-{
-    red_qxl_update_area(instance->st, surface_id, area, dirty_rects,
-                        num_dirty_rects, clear_dirty_region);
-}
-
-SPICE_GNUC_VISIBLE
-void spice_qxl_add_memslot(QXLInstance *instance, QXLDevMemSlot *slot)
-{
-    red_qxl_add_memslot(instance->st, slot);
-}
-
-SPICE_GNUC_VISIBLE
-void spice_qxl_del_memslot(QXLInstance *instance, uint32_t slot_group_id, uint32_t slot_id)
-{
-    red_qxl_del_memslot(instance->st, slot_group_id, slot_id);
-}
-
-SPICE_GNUC_VISIBLE
-void spice_qxl_reset_memslots(QXLInstance *instance)
-{
-    red_qxl_reset_memslots(instance->st);
-}
-
-SPICE_GNUC_VISIBLE
-void spice_qxl_destroy_surfaces(QXLInstance *instance)
-{
-    red_qxl_destroy_surfaces(instance->st);
-}
-
-SPICE_GNUC_VISIBLE
-void spice_qxl_destroy_primary_surface(QXLInstance *instance, uint32_t surface_id)
-{
-    red_qxl_destroy_primary_surface(instance->st, surface_id, 0, 0);
-}
-
-SPICE_GNUC_VISIBLE
-void spice_qxl_create_primary_surface(QXLInstance *instance, uint32_t surface_id,
-                                QXLDevSurfaceCreate *surface)
-{
-    red_qxl_create_primary_surface_sync(instance->st, surface_id, surface);
-}
-
-SPICE_GNUC_VISIBLE
-void spice_qxl_reset_image_cache(QXLInstance *instance)
-{
-    red_qxl_reset_image_cache(instance->st);
-}
-
-SPICE_GNUC_VISIBLE
-void spice_qxl_reset_cursor(QXLInstance *instance)
-{
-    red_qxl_reset_cursor(instance->st);
-}
-
-SPICE_GNUC_VISIBLE
-void spice_qxl_destroy_surface_wait(QXLInstance *instance, uint32_t surface_id)
-{
-    red_qxl_destroy_surface_wait_sync(instance->st, surface_id);
-}
-
-SPICE_GNUC_VISIBLE
-void spice_qxl_loadvm_commands(QXLInstance *instance, struct QXLCommandExt *ext, uint32_t count)
-{
-    red_qxl_loadvm_commands(instance->st, ext, count);
-}
-
-SPICE_GNUC_VISIBLE
-void spice_qxl_update_area_async(QXLInstance *instance, uint32_t surface_id, QXLRect *qxl_area,
-                                 uint32_t clear_dirty_region, uint64_t cookie)
-{
-    red_qxl_update_area_async(instance->st, surface_id, qxl_area,
-                                     clear_dirty_region, cookie);
-}
-
-SPICE_GNUC_VISIBLE
-void spice_qxl_add_memslot_async(QXLInstance *instance, QXLDevMemSlot *slot, uint64_t cookie)
-{
-    red_qxl_add_memslot_async(instance->st, slot, cookie);
-}
-
-SPICE_GNUC_VISIBLE
-void spice_qxl_destroy_surfaces_async(QXLInstance *instance, uint64_t cookie)
-{
-    red_qxl_destroy_surfaces_async(instance->st, cookie);
-}
-
-SPICE_GNUC_VISIBLE
-void spice_qxl_destroy_primary_surface_async(QXLInstance *instance, uint32_t surface_id, uint64_t cookie)
-{
-    red_qxl_destroy_primary_surface(instance->st, surface_id, 1, cookie);
-}
-
-SPICE_GNUC_VISIBLE
-void spice_qxl_create_primary_surface_async(QXLInstance *instance, uint32_t surface_id,
-                                QXLDevSurfaceCreate *surface, uint64_t cookie)
-{
-    red_qxl_create_primary_surface_async(instance->st, surface_id, surface, cookie);
-}
-
-SPICE_GNUC_VISIBLE
-void spice_qxl_destroy_surface_async(QXLInstance *instance, uint32_t surface_id, uint64_t cookie)
-{
-    red_qxl_destroy_surface_wait_async(instance->st, surface_id, cookie);
-}
-
-SPICE_GNUC_VISIBLE
-void spice_qxl_flush_surfaces_async(QXLInstance *instance, uint64_t cookie)
-{
-    red_qxl_flush_surfaces_async(instance->st, cookie);
-}
-
-SPICE_GNUC_VISIBLE
-void spice_qxl_monitors_config_async(QXLInstance *instance, QXLPHYSICAL monitors_config,
-                                     int group_id, uint64_t cookie)
-{
-    red_qxl_monitors_config_async(instance->st, monitors_config, group_id, cookie);
-}
-
 SPICE_GNUC_VISIBLE
 void spice_qxl_set_max_monitors(QXLInstance *instance, unsigned int max_monitors)
 {
     instance->st->max_monitors = MAX(1u, max_monitors);
 }
 
-SPICE_GNUC_VISIBLE
-void spice_qxl_driver_unload(QXLInstance *instance)
-{
-    red_qxl_driver_unload(instance->st);
-}
-
 SpiceMsgDisplayGlScanoutUnix *red_qxl_get_gl_scanout(QXLInstance *qxl)
 {
     pthread_mutex_lock(&qxl->st->scanout_mutex);
commit 6aa1a17c69dc3cc02f338a78b3266e4c00ea1c1a
Author: Frediano Ziglio <fziglio at redhat.com>
Date:   Mon Mar 16 02:51:22 2020 +0000

    spice-qxl: Remove QXLWorker definition
    
    It was made obsolete more than 6 years ago by
    
      commit fe0941fb025d02a750bdaee296f93e8024375d25
      Author: Marc-André Lureau <marcandre.lureau at gmail.com>
      Date:   Thu Oct 3 22:52:38 2013 +0200
    
          server: mark deprecated symbols
    
    For compatibility with spice_replay_next_cmd pass a QXLInstance
    pointer. For more information see comment on
    red-qxl.c:red_qxl_attach_worker.
    
    Signed-off-by: Frediano Ziglio <fziglio at redhat.com>

diff --git a/server/red-qxl.c b/server/red-qxl.c
index dbfcd440..8e123383 100644
--- a/server/red-qxl.c
+++ b/server/red-qxl.c
@@ -42,7 +42,6 @@
 #define MAX_MONITORS_COUNT 16
 
 struct QXLState {
-    QXLWorker qxl_worker;
     QXLInstance *qxl;
     Dispatcher *dispatcher;
     uint32_t pending;
@@ -129,15 +128,6 @@ static void red_qxl_update_area_async(QXLState *qxl_state,
                             &payload);
 }
 
-static void qxl_worker_update_area(QXLWorker *qxl_worker, uint32_t surface_id,
-                                   QXLRect *qxl_area, QXLRect *qxl_dirty_rects,
-                                   uint32_t num_dirty_rects, uint32_t clear_dirty_region)
-{
-    QXLState *qxl_state = SPICE_CONTAINEROF(qxl_worker, QXLState, qxl_worker);
-    red_qxl_update_area(qxl_state, surface_id, qxl_area,
-                        qxl_dirty_rects, num_dirty_rects, clear_dirty_region);
-}
-
 static void red_qxl_add_memslot(QXLState *qxl_state, QXLDevMemSlot *mem_slot)
 {
     RedWorkerMessageAddMemslot payload;
@@ -148,12 +138,6 @@ static void red_qxl_add_memslot(QXLState *qxl_state, QXLDevMemSlot *mem_slot)
                             &payload);
 }
 
-static void qxl_worker_add_memslot(QXLWorker *qxl_worker, QXLDevMemSlot *mem_slot)
-{
-    QXLState *qxl_state = SPICE_CONTAINEROF(qxl_worker, QXLState, qxl_worker);
-    red_qxl_add_memslot(qxl_state, mem_slot);
-}
-
 static void red_qxl_add_memslot_async(QXLState *qxl_state, QXLDevMemSlot *mem_slot, uint64_t cookie)
 {
     RedWorkerMessageAddMemslotAsync payload;
@@ -174,12 +158,6 @@ static void red_qxl_del_memslot(QXLState *qxl_state, uint32_t slot_group_id, uin
     dispatcher_send_message(qxl_state->dispatcher, message, &payload);
 }
 
-static void qxl_worker_del_memslot(QXLWorker *qxl_worker, uint32_t slot_group_id, uint32_t slot_id)
-{
-    QXLState *qxl_state = SPICE_CONTAINEROF(qxl_worker, QXLState, qxl_worker);
-    red_qxl_del_memslot(qxl_state, slot_group_id, slot_id);
-}
-
 static void red_qxl_destroy_surfaces(QXLState *qxl_state)
 {
     RedWorkerMessageDestroySurfaces payload;
@@ -189,12 +167,6 @@ static void red_qxl_destroy_surfaces(QXLState *qxl_state)
                             &payload);
 }
 
-static void qxl_worker_destroy_surfaces(QXLWorker *qxl_worker)
-{
-    QXLState *qxl_state = SPICE_CONTAINEROF(qxl_worker, QXLState, qxl_worker);
-    red_qxl_destroy_surfaces(qxl_state);
-}
-
 static void red_qxl_destroy_surfaces_async(QXLState *qxl_state, uint64_t cookie)
 {
     RedWorkerMessageDestroySurfacesAsync payload;
@@ -250,12 +222,6 @@ red_qxl_destroy_primary_surface(QXLState *qxl_state,
     }
 }
 
-static void qxl_worker_destroy_primary_surface(QXLWorker *qxl_worker, uint32_t surface_id)
-{
-    QXLState *qxl_state = SPICE_CONTAINEROF(qxl_worker, QXLState, qxl_worker);
-    red_qxl_destroy_primary_surface(qxl_state, surface_id, 0, 0);
-}
-
 /* used by RedWorker */
 void red_qxl_create_primary_surface_complete(QXLState *qxl_state, const QXLDevSurfaceCreate *surface)
 {
@@ -295,13 +261,6 @@ red_qxl_create_primary_surface_sync(QXLState *qxl_state, uint32_t surface_id,
     red_qxl_create_primary_surface_complete(qxl_state, surface);
 }
 
-static void qxl_worker_create_primary_surface(QXLWorker *qxl_worker, uint32_t surface_id,
-                                      QXLDevSurfaceCreate *surface)
-{
-    QXLState *qxl_state = SPICE_CONTAINEROF(qxl_worker, QXLState, qxl_worker);
-    red_qxl_create_primary_surface_sync(qxl_state, surface_id, surface);
-}
-
 static void red_qxl_reset_image_cache(QXLState *qxl_state)
 {
     RedWorkerMessageResetImageCache payload;
@@ -311,12 +270,6 @@ static void red_qxl_reset_image_cache(QXLState *qxl_state)
                             &payload);
 }
 
-static void qxl_worker_reset_image_cache(QXLWorker *qxl_worker)
-{
-    QXLState *qxl_state = SPICE_CONTAINEROF(qxl_worker, QXLState, qxl_worker);
-    red_qxl_reset_image_cache(qxl_state);
-}
-
 static void red_qxl_reset_cursor(QXLState *qxl_state)
 {
     RedWorkerMessageResetCursor payload;
@@ -326,12 +279,6 @@ static void red_qxl_reset_cursor(QXLState *qxl_state)
                             &payload);
 }
 
-static void qxl_worker_reset_cursor(QXLWorker *qxl_worker)
-{
-    QXLState *qxl_state = SPICE_CONTAINEROF(qxl_worker, QXLState, qxl_worker);
-    red_qxl_reset_cursor(qxl_state);
-}
-
 static void red_qxl_destroy_surface_wait_sync(QXLState *qxl_state,
                                               uint32_t surface_id)
 {
@@ -355,12 +302,6 @@ static void red_qxl_destroy_surface_wait_async(QXLState *qxl_state,
     dispatcher_send_message(qxl_state->dispatcher, message, &payload);
 }
 
-static void qxl_worker_destroy_surface_wait(QXLWorker *qxl_worker, uint32_t surface_id)
-{
-    QXLState *qxl_state = SPICE_CONTAINEROF(qxl_worker, QXLState, qxl_worker);
-    red_qxl_destroy_surface_wait_sync(qxl_state, surface_id);
-}
-
 static void red_qxl_reset_memslots(QXLState *qxl_state)
 {
     RedWorkerMessageResetMemslots payload;
@@ -370,12 +311,6 @@ static void red_qxl_reset_memslots(QXLState *qxl_state)
                             &payload);
 }
 
-static void qxl_worker_reset_memslots(QXLWorker *qxl_worker)
-{
-    QXLState *qxl_state = SPICE_CONTAINEROF(qxl_worker, QXLState, qxl_worker);
-    red_qxl_reset_memslots(qxl_state);
-}
-
 static bool red_qxl_set_pending(QXLState *qxl_state, int pending)
 {
     // this is not atomic but is not an issue
@@ -399,12 +334,6 @@ static void red_qxl_wakeup(QXLState *qxl_state)
                             &payload);
 }
 
-static void qxl_worker_wakeup(QXLWorker *qxl_worker)
-{
-    QXLState *qxl_state = SPICE_CONTAINEROF(qxl_worker, QXLState, qxl_worker);
-    red_qxl_wakeup(qxl_state);
-}
-
 static void red_qxl_oom(QXLState *qxl_state)
 {
     RedWorkerMessageOom payload;
@@ -417,12 +346,6 @@ static void red_qxl_oom(QXLState *qxl_state)
                             &payload);
 }
 
-static void qxl_worker_oom(QXLWorker *qxl_worker)
-{
-    QXLState *qxl_state = SPICE_CONTAINEROF(qxl_worker, QXLState, qxl_worker);
-    red_qxl_oom(qxl_state);
-}
-
 void red_qxl_start(QXLInstance *qxl)
 {
     RedWorkerMessageStart payload;
@@ -432,12 +355,6 @@ void red_qxl_start(QXLInstance *qxl)
                             &payload);
 }
 
-static void qxl_worker_start(QXLWorker *qxl_worker)
-{
-    QXLState *state = SPICE_CONTAINEROF(qxl_worker, QXLState, qxl_worker);
-    red_qxl_start(state->qxl);
-}
-
 static void red_qxl_flush_surfaces_async(QXLState *qxl_state, uint64_t cookie)
 {
     RedWorkerMessageFlushSurfacesAsync payload;
@@ -481,12 +398,6 @@ void red_qxl_stop(QXLInstance *qxl)
                             &payload);
 }
 
-static void qxl_worker_stop(QXLWorker *qxl_worker)
-{
-    QXLState *state = SPICE_CONTAINEROF(qxl_worker, QXLState, qxl_worker);
-    red_qxl_stop(state->qxl);
-}
-
 static void red_qxl_loadvm_commands(QXLState *qxl_state,
                                     struct QXLCommandExt *ext,
                                     uint32_t count)
@@ -500,14 +411,6 @@ static void red_qxl_loadvm_commands(QXLState *qxl_state,
                             &payload);
 }
 
-static void qxl_worker_loadvm_commands(QXLWorker *qxl_worker,
-                                       struct QXLCommandExt *ext,
-                                       uint32_t count)
-{
-    QXLState *qxl_state = SPICE_CONTAINEROF(qxl_worker, QXLState, qxl_worker);
-    red_qxl_loadvm_commands(qxl_state, ext, count);
-}
-
 uint32_t red_qxl_get_ram_size(QXLInstance *qxl)
 {
     QXLDevInitInfo qxl_info;
@@ -848,24 +751,6 @@ void red_qxl_init(RedsState *reds, QXLInstance *qxl)
     qxl_state->scanout.drm_dma_buf_fd = -1;
     qxl_state->gl_draw_cookie = GL_DRAW_COOKIE_INVALID;
     qxl_state->dispatcher = dispatcher_new(RED_WORKER_MESSAGE_COUNT);
-    qxl_state->qxl_worker.major_version = SPICE_INTERFACE_QXL_MAJOR;
-    qxl_state->qxl_worker.minor_version = SPICE_INTERFACE_QXL_MINOR;
-    qxl_state->qxl_worker.wakeup = qxl_worker_wakeup;
-    qxl_state->qxl_worker.oom = qxl_worker_oom;
-    qxl_state->qxl_worker.start = qxl_worker_start;
-    qxl_state->qxl_worker.stop = qxl_worker_stop;
-    qxl_state->qxl_worker.update_area = qxl_worker_update_area;
-    qxl_state->qxl_worker.add_memslot = qxl_worker_add_memslot;
-    qxl_state->qxl_worker.del_memslot = qxl_worker_del_memslot;
-    qxl_state->qxl_worker.reset_memslots = qxl_worker_reset_memslots;
-    qxl_state->qxl_worker.destroy_surfaces = qxl_worker_destroy_surfaces;
-    qxl_state->qxl_worker.create_primary_surface = qxl_worker_create_primary_surface;
-    qxl_state->qxl_worker.destroy_primary_surface = qxl_worker_destroy_primary_surface;
-
-    qxl_state->qxl_worker.reset_image_cache = qxl_worker_reset_image_cache;
-    qxl_state->qxl_worker.reset_cursor = qxl_worker_reset_cursor;
-    qxl_state->qxl_worker.destroy_surface_wait = qxl_worker_destroy_surface_wait;
-    qxl_state->qxl_worker.loadvm_commands = qxl_worker_loadvm_commands;
 
     qxl_state->max_monitors = UINT_MAX;
     qxl->st = qxl_state;
@@ -975,7 +860,16 @@ RedsState* red_qxl_get_server(QXLState *qxl_state)
 void red_qxl_attach_worker(QXLInstance *qxl)
 {
     QXLInterface *qxl_interface = qxl_get_interface(qxl);
-    qxl_interface->attache_worker(qxl, &qxl->st->qxl_worker);
+
+    /* cast for compatibility with spice_replay_next_cmd
+     * In the past spice_replay_next_cmd received a QXLWorker instead of
+     * a QXLInstance. Users of this function could have retrieved this pointer
+     * only by attache_worker callback but this structure was all deprecated.
+     * Passing QXLInstance pointer instead allows these programs to keep working
+     * although spice_replay_next_cmd declaration changed */
+    if (qxl_interface->attache_worker) {
+        qxl_interface->attache_worker(qxl, (QXLWorker *) qxl);
+    }
 }
 
 void red_qxl_set_compression_level(QXLInstance *qxl, int level)
diff --git a/server/red-replay-qxl.c b/server/red-replay-qxl.c
index 4525c7d7..990e5485 100644
--- a/server/red-replay-qxl.c
+++ b/server/red-replay-qxl.c
@@ -1247,7 +1247,7 @@ static void red_replay_cursor_cmd_free(SpiceReplay *replay, QXLCursorCmd *qxl)
     g_free(qxl);
 }
 
-static void replay_handle_create_primary(QXLWorker *worker, SpiceReplay *replay)
+static void replay_handle_create_primary(QXLInstance *instance, SpiceReplay *replay)
 {
     QXLDevSurfaceCreate surface = { 0, };
     size_t size;
@@ -1256,7 +1256,7 @@ static void replay_handle_create_primary(QXLWorker *worker, SpiceReplay *replay)
     if (replay->created_primary) {
         g_warning("WARNING: %d: original recording event not preceded by a destroy primary",
                   replay->counter);
-        worker->destroy_primary_surface(worker, 0);
+        spice_qxl_destroy_primary_surface(instance, 0);
     }
     replay->created_primary = TRUE;
 
@@ -1273,26 +1273,26 @@ static void replay_handle_create_primary(QXLWorker *worker, SpiceReplay *replay)
     replay->allocated = g_list_remove(replay->allocated, mem);
     replay->primary_mem = mem;
     surface.mem = QXLPHYSICAL_FROM_PTR(mem);
-    worker->create_primary_surface(worker, 0, &surface);
+    spice_qxl_create_primary_surface(instance, 0, &surface);
 }
 
-static void replay_handle_dev_input(QXLWorker *worker, SpiceReplay *replay,
+static void replay_handle_dev_input(QXLInstance *instance, SpiceReplay *replay,
                                     RedWorkerMessage message)
 {
     switch (message) {
     case RED_WORKER_MESSAGE_CREATE_PRIMARY_SURFACE:
     case RED_WORKER_MESSAGE_CREATE_PRIMARY_SURFACE_ASYNC:
-        replay_handle_create_primary(worker, replay);
+        replay_handle_create_primary(instance, replay);
         break;
     case RED_WORKER_MESSAGE_DESTROY_PRIMARY_SURFACE:
         replay->created_primary = FALSE;
-        worker->destroy_primary_surface(worker, 0);
+        spice_qxl_destroy_primary_surface(instance, 0);
         g_free(replay->primary_mem);
         replay->primary_mem = NULL;
         break;
     case RED_WORKER_MESSAGE_DESTROY_SURFACES:
         replay->created_primary = FALSE;
-        worker->destroy_surfaces(worker);
+        spice_qxl_destroy_surfaces(instance);
         break;
     case RED_WORKER_MESSAGE_UPDATE:
         // XXX do anything? we record the correct bitmaps already.
@@ -1311,7 +1311,7 @@ static void replay_handle_dev_input(QXLWorker *worker, SpiceReplay *replay,
  * since it will block reading from the dispatcher pipe.
  */
 SPICE_GNUC_VISIBLE QXLCommandExt* spice_replay_next_cmd(SpiceReplay *replay,
-                                                         QXLWorker *worker)
+                                                        QXLInstance *instance)
 {
     QXLCommandExt* cmd = NULL;
     uint64_t timestamp;
@@ -1326,7 +1326,7 @@ SPICE_GNUC_VISIBLE QXLCommandExt* spice_replay_next_cmd(SpiceReplay *replay,
             goto error;
         }
         if (what == 1) {
-            replay_handle_dev_input(worker, replay, type);
+            replay_handle_dev_input(instance, replay, type);
         }
     }
     cmd = replay_malloc0(replay, sizeof(QXLCommandExt));
diff --git a/server/spice-qxl.h b/server/spice-qxl.h
index 5349d927..b0dce2c6 100644
--- a/server/spice-qxl.h
+++ b/server/spice-qxl.h
@@ -41,30 +41,6 @@ typedef struct QXLWorker QXLWorker;
 typedef struct QXLDevMemSlot QXLDevMemSlot;
 typedef struct QXLDevSurfaceCreate QXLDevSurfaceCreate;
 
-struct QXLWorker {
-    uint32_t minor_version;
-    uint32_t major_version;
-    /* These calls are deprecated. Please use the spice_qxl_* calls instead */
-    void (*wakeup)(QXLWorker *worker) SPICE_GNUC_DEPRECATED;
-    void (*oom)(QXLWorker *worker) SPICE_GNUC_DEPRECATED;
-    void (*start)(QXLWorker *worker) SPICE_GNUC_DEPRECATED;
-    void (*stop)(QXLWorker *worker) SPICE_GNUC_DEPRECATED;
-    void (*update_area)(QXLWorker *qxl_worker, uint32_t surface_id,
-                       struct QXLRect *area, struct QXLRect *dirty_rects,
-                       uint32_t num_dirty_rects, uint32_t clear_dirty_region) SPICE_GNUC_DEPRECATED;
-    void (*add_memslot)(QXLWorker *worker, QXLDevMemSlot *slot) SPICE_GNUC_DEPRECATED;
-    void (*del_memslot)(QXLWorker *worker, uint32_t slot_group_id, uint32_t slot_id) SPICE_GNUC_DEPRECATED;
-    void (*reset_memslots)(QXLWorker *worker) SPICE_GNUC_DEPRECATED;
-    void (*destroy_surfaces)(QXLWorker *worker) SPICE_GNUC_DEPRECATED;
-    void (*destroy_primary_surface)(QXLWorker *worker, uint32_t surface_id) SPICE_GNUC_DEPRECATED;
-    void (*create_primary_surface)(QXLWorker *worker, uint32_t surface_id,
-                                   QXLDevSurfaceCreate *surface) SPICE_GNUC_DEPRECATED;
-    void (*reset_image_cache)(QXLWorker *worker) SPICE_GNUC_DEPRECATED;
-    void (*reset_cursor)(QXLWorker *worker) SPICE_GNUC_DEPRECATED;
-    void (*destroy_surface_wait)(QXLWorker *worker, uint32_t surface_id) SPICE_GNUC_DEPRECATED;
-    void (*loadvm_commands)(QXLWorker *worker, struct QXLCommandExt *ext, uint32_t count) SPICE_GNUC_DEPRECATED;
-};
-
 void spice_qxl_wakeup(QXLInstance *instance);
 void spice_qxl_oom(QXLInstance *instance);
 /* deprecated since 0.11.2, spice_server_vm_start replaces it */
diff --git a/server/spice-replay.h b/server/spice-replay.h
index 19a0128b..167a1563 100644
--- a/server/spice-replay.h
+++ b/server/spice-replay.h
@@ -30,7 +30,7 @@ typedef struct SpiceReplay SpiceReplay;
 
 /* reads until encountering a cmd, processing any recorded messages (io) on the
  * way */
-QXLCommandExt*  spice_replay_next_cmd(SpiceReplay *replay, QXLWorker *worker);
+QXLCommandExt*  spice_replay_next_cmd(SpiceReplay *replay, QXLInstance *instance);
 void            spice_replay_free_cmd(SpiceReplay *replay, QXLCommandExt *cmd);
 void            spice_replay_free(SpiceReplay *replay);
 SpiceReplay *   spice_replay_new(FILE *file, int nsurfaces);
diff --git a/server/tests/replay.c b/server/tests/replay.c
index 44f24445..071c87f1 100644
--- a/server/tests/replay.c
+++ b/server/tests/replay.c
@@ -43,7 +43,6 @@
 static SpiceCoreInterface *core;
 static SpiceServer *server;
 static SpiceReplay *replay;
-static QXLWorker *qxl_worker = NULL;
 static gboolean started = FALSE;
 static QXLInstance display_sin;
 static gint slow = 0;
@@ -74,7 +73,7 @@ static QXLDevMemSlot slot = {
 .qxl_ram_size = ~0,
 };
 
-static void attach_worker(QXLInstance *qin, QXLWorker *_qxl_worker)
+static void attach_worker(QXLInstance *qin, SPICE_GNUC_UNUSED QXLWorker *_qxl_worker)
 {
     static int count = 0;
     if (++count > 1) {
@@ -82,7 +81,6 @@ static void attach_worker(QXLInstance *qin, QXLWorker *_qxl_worker)
         return;
     }
     g_debug("%s\n", __func__);
-    qxl_worker = _qxl_worker;
     spice_qxl_add_memslot(qin, &slot);
     spice_server_vm_start(server);
 }
@@ -112,7 +110,7 @@ static gboolean fill_queue_idle(gpointer user_data)
 
     while ((g_async_queue_length(display_queue) +
             g_async_queue_length(cursor_queue)) < 50) {
-        QXLCommandExt *cmd = spice_replay_next_cmd(replay, qxl_worker);
+        QXLCommandExt *cmd = spice_replay_next_cmd(replay, &display_sin);
         if (!cmd) {
             g_async_queue_push(display_queue, GINT_TO_POINTER(-1));
             g_async_queue_push(cursor_queue, GINT_TO_POINTER(-1));
diff --git a/server/tests/test-display-base.c b/server/tests/test-display-base.c
index c47bcfc0..54881649 100644
--- a/server/tests/test-display-base.c
+++ b/server/tests/test-display-base.c
@@ -423,7 +423,7 @@ static QXLDevMemSlot slot = {
 .qxl_ram_size = ~0,
 };
 
-static void attache_worker(QXLInstance *qin, QXLWorker *_qxl_worker)
+static void attache_worker(QXLInstance *qin, SPICE_GNUC_UNUSED QXLWorker *_qxl_worker)
 {
     Test *test = SPICE_CONTAINEROF(qin, Test, qxl_instance);
 


More information about the Spice-commits mailing list