libxc: Document xc_domain_resume

Document the save and suspend mechanism.

Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Signed-off-by: Wei Liu <wei.liu2@citrix.com>
This commit is contained in:
Konrad Rzeszutek Wilk authored and Ian Jackson committed 2016-04-01 14:44:12 +01:00
1 parent 8903a7a5f6
commit b064fb9598
1 file changed
+50
+50
View File
@@ -566,6 +566,56 @@ int xc_domain_destroy(xc_interface *xch,
* This function resumes a suspended domain. The domain should have
* been previously suspended.
*
* Note that there are 'xc_domain_suspend' as suspending a domain
* is quite the endeavour.
*
* For the purpose of this explanation there are three guests:
* PV (using hypercalls for privilgied operations), HVM
* (fully hardware virtualized guests using emulated devices for everything),
* and PVHVM (PV aware with hardware virtualisation).
*
* HVM guest are the simplest - they suspend via S3 / S4 and resume from
* S3 / S4. Upon resume they have to re-negotiate with the emulated devices.
*
* PV and PVHVM communicate via hypercalls for suspend (and resume).
* For suspend the toolstack initiates the process by writing an value
* in XenBus "control/shutdown" with the string "suspend".
*
* The PV guest stashes anything it deems neccessary in 'struct
* start_info' in case of failure (PVHVM may ignore this) and calls
* the SCHEDOP_shutdown::SHUTDOWN_suspend hypercall (for PV as
* argument it passes the MFN to 'struct start_info').
*
* And then the guest is suspended.
*
* The checkpointing or notifying a guest that the suspend failed or
* cancelled (in case of checkpoint) is by having the
* SCHEDOP_shutdown::SHUTDOWN_suspend hypercall return a non-zero
* value.
*
* The PV and PVHVM resume path are similar. For PV it would be
* similar to bootup - figure out where the 'struct start_info' is (or
* if the suspend was cancelled aka checkpointed - reuse the saved
* values).
*
* From here on they differ depending whether the guest is PV or PVHVM
* in specifics but follow overall the same path:
* - PV: Bringing up the vCPUS,
* - PVHVM: Setup vector callback,
* - Bring up vCPU runstates,
* - Remap the grant tables if checkpointing or setup from scratch,
*
*
* If the resume was not checkpointing (or if suspend was succesful) we would
* setup the PV timers and the different PV events. Lastly the PV drivers
* re-negotiate with the backend.
*
* This function would return before the guest started resuming. That is
* the guest would be in non-running state and its vCPU context would be
* in the the SCHEDOP_shutdown::SHUTDOWN_suspend hypercall return path
* (for PV and PVHVM). For HVM it would be in would be in QEMU emulated
* BIOS handling S3 suspend.
*
* @parm xch a handle to an open hypervisor interface
* @parm domid the domain id to resume
* @parm fast use cooperative resume (guest must support this)
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.