[Spice-devel] [spice-protocol PATCH v2 1/2] add QXL_IO_FLUSH_{SURFACES, RELEASE} for sleep (S3) support
Alon Levy
alevy at redhat.com
Fri Jun 24 03:50:58 PDT 2011
Adds a new revision to notify of this new IO to the driver. This
new revision (QXL_REVISION_STABLE_V10) will also include other IO
updates for async IO.
related RHBZ: 688883
Guest initiated sleep looks like this:
Guest:
(0) stop putting new commands into the rings
(1) QXL_IO_NOTIFY_CMD
(2) QXL_IO_NOTIFY_CURSOR
qxl calls notify(), to make the worker thread empty the command
rings before it processes the next dispatcher request.
(3) QXL_IO_FLUSH_SURFACES
qxl calls stop()+start(), spice-server renders all surfaces,
thereby flushing state to device memory.
(4) QXL_IO_DESTROY_ALL_SURFACES
zap surfaces
(5) QXL_IO_FLUSH_RELEASE
push release queue head into the release ring, so the guest
will see it and can release everything.
(6) tell acpi to reset
Qemu:
(7) qxl_reset_handler
Guest:
(8) sends surface create commands
The QXL_IO_FLUSH_SURFACES is an optimization, to reduce vmexits. It is used to
update all surfaces at once (equivalent to UPDATE_AREA X NUM_ACTIVE_SURFACES)
destroy all surfaces to release resources but not destroy the guest side surfaces
get device to flush all server released resources to the release ring (could use multiple
calls to OOM - but this is not well defined, would need to loop)
After the two calls (1# and 2# above) there will be no memory allocated on the pci bars.
---
spice/qxl_dev.h | 2 ++
1 files changed, 2 insertions(+), 0 deletions(-)
diff --git a/spice/qxl_dev.h b/spice/qxl_dev.h
index 57d00ed..1c39a0f 100644
--- a/spice/qxl_dev.h
+++ b/spice/qxl_dev.h
@@ -88,6 +88,8 @@ enum {
QXL_IO_DESTROY_PRIMARY_ASYNC,
QXL_IO_DESTROY_SURFACE_ASYNC,
QXL_IO_DESTROY_ALL_SURFACES_ASYNC,
+ QXL_IO_FLUSH_SURFACES,
+ QXL_IO_FLUSH_RELEASE,
QXL_IO_RANGE_SIZE
};
--
1.7.5.4
More information about the Spice-devel
mailing list