[Spice-devel] [PATCH v2] server: add QXLWorker.flush_surfaces_async for S3/S4 support

Yonit Halperin yhalperi at redhat.com
Thu Jul 7 00:48:30 PDT 2011


On 07/06/2011 08:37 PM, Alon Levy wrote:
> This does three things:
>   flush both command rings
>   stop (rendering everything)
>   start
>
> Pulled out start and stop to their own functions to do this easily.
> The added api is specifically async, i.e. it calls async_complete
> when done.

Hi,
after flushing the qxl commands, flush_surfaces doesn't need to call 
stop and start, it just needs the start part that flushes the surfaces 
and waits for the channels outgoing items. destroy_surfaces that will 
come afterwards for S3, will clean the glz drawbales
h b/server/red_worker.h
> index 9ed7156..aae025b 100644
> --- a/server/red_worker.h
> +++ b/server/red_worker.h
> @@ -78,6 +78,8 @@ enum {
>       RED_WORKER_MESSAGE_DESTROY_PRIMARY_SURFACE_ASYNC,
>       RED_WORKER_MESSAGE_DESTROY_SURFACE_WAIT_ASYNC,
>       RED_WORKER_MESSAGE_OOM_ASYNC,
> +    /* suspend command */
maybe mention it is not only suspend (everything that triggeres 
DrvAssertMode(disable) in Windows guest)
> +    RED_WORKER_MESSAGE_FLUSH_SURFACES_ASYNC,
>   };
>
>   typedef uint32_t RedWorkerMessage;
> diff --git a/server/spice.h b/server/spice.h
> index f0d5685..a715666 100644
> --- a/server/spice.h
> +++ b/server/spice.h
> @@ -133,6 +133,8 @@ struct QXLWorker {
>                                      QXLDevSurfaceCreate *surface);
>       void (*destroy_surface_wait_async)(QXLWorker *worker, uint32_t surface_id);
>       void (*oom_async)(QXLWorker *worker);
> +    /* suspend support - stop+start+read_cmd_ring */
> +    void (*flush_surfaces_async)(QXLWorker *worker);
>   };
>
>   typedef struct QXLDrawArea {



More information about the Spice-devel mailing list