[Spice-devel] [PATCH v2] server: add async io support

Alon Levy alevy at redhat.com
Thu Jul 7 00:31:20 PDT 2011


On Thu, Jul 07, 2011 at 09:38:01AM +0300, Yonit Halperin wrote:
> On 07/06/2011 08:37 PM, Alon Levy wrote:
> >The new _ASYNC io's in qxl_dev listed at the end get six new api
> >functions, and an additional callback function "async_complete". When
> >the async version of a specific io is used, completion is notified by
> >calling async_complete, and no READY message is written or expected by
> >the dispatcher.
> >
> >update_area has been changed to push QXLRects to the worker thread, where
> >the conversion to SpiceRect takes place.
> >
> >Added api:
> >
> >QXLWorker:
> >     update_area_async
> >     add_memslot_async
> >     destroy_surfaces_async
> >     destroy_primary_surface_async
> >     create_primary_surface_async
> >     destroy_surface_wait_async
> >     oom_async
> >
> >
> >
> >-static void qxl_worker_oom(QXLWorker *qxl_worker)
> >+static void qxl_worker_oom_helper(QXLWorker *qxl_worker, int async)
> >  {
> >      RedDispatcher *dispatcher = (RedDispatcher *)qxl_worker;
> >+    RedWorkerMessage message;
> >+
> >      if (!test_bit(RED_WORKER_PENDING_OOM, dispatcher->pending)) {
> >-        RedWorkerMessage message = RED_WORKER_MESSAGE_OOM;
> >+        if (async) {
> >+            message = RED_WORKER_MESSAGE_OOM_ASYNC;
> >+        } else {
> >+            message = RED_WORKER_MESSAGE_OOM;
> >+        }
> >          set_bit(RED_WORKER_PENDING_OOM,&dispatcher->pending);
> >          write_message(dispatcher->channel,&message);
> >      }
> >  }
> >
> 
> OOM has always been async - do we need two different RED_WORKER_MESSAGEs?
No, I guess we can throw away the IO as well then.

> 
> >+static void qxl_worker_oom(QXLWorker *qxl_worker)
> >+{
> >+    qxl_worker_oom_helper(qxl_worker, 0);
> >+}
> >+
> >+static void qxl_worker_oom_async(QXLWorker *qxl_worker)
> >+{
> >+    qxl_worker_oom_helper(qxl_worker, 1);
> >+}
> >+
> 


More information about the Spice-devel mailing list