
On Wed, Mar 14, 2012 at 11:26:53PM +0800, Osier Yang wrote:
This introduces a new domain state pmsuspended to represent the domain which has been suspended by guest power management, e.g. (entered itno s3 state). Because a "running" state could
typo: into !
be confused in this case, one will see the guest is paused actually while playing. And state "paused" is for the domain which was paused by virDomainSuspend. --- include/libvirt/libvirt.h.in | 23 ++++++++++++++++------- src/conf/domain_conf.c | 38 +++++++++++++++++++++++++++++--------- tools/virsh.c | 10 ++++++++++ tools/virsh.pod | 7 ++++++- 4 files changed, 61 insertions(+), 17 deletions(-)
diff --git a/include/libvirt/libvirt.h.in b/include/libvirt/libvirt.h.in index caf5085..12ba63f 100644 --- a/include/libvirt/libvirt.h.in +++ b/include/libvirt/libvirt.h.in @@ -86,13 +86,15 @@ typedef virDomain *virDomainPtr; * A domain may be in different states at a given point in time */ typedef enum { - VIR_DOMAIN_NOSTATE = 0, /* no state */ - VIR_DOMAIN_RUNNING = 1, /* the domain is running */ - VIR_DOMAIN_BLOCKED = 2, /* the domain is blocked on resource */ - VIR_DOMAIN_PAUSED = 3, /* the domain is paused by user */ - VIR_DOMAIN_SHUTDOWN= 4, /* the domain is being shut down */ - VIR_DOMAIN_SHUTOFF = 5, /* the domain is shut off */ - VIR_DOMAIN_CRASHED = 6, /* the domain is crashed */ + VIR_DOMAIN_NOSTATE = 0, /* no state */ + VIR_DOMAIN_RUNNING = 1, /* the domain is running */ + VIR_DOMAIN_BLOCKED = 2, /* the domain is blocked on resource */ + VIR_DOMAIN_PAUSED = 3, /* the domain is paused by user */ + VIR_DOMAIN_SHUTDOWN= 4, /* the domain is being shut down */ + VIR_DOMAIN_SHUTOFF = 5, /* the domain is shut off */ + VIR_DOMAIN_CRASHED = 6, /* the domain is crashed */ + VIR_DOMAIN_PMSUSPENDED = 7, /* the domain is suspended by guest + power management */
#ifdef VIR_ENUM_SENTINELS /* @@ -183,6 +185,13 @@ typedef enum { #endif } virDomainCrashedReason;
+typedef enum { + VIR_DOMAIN_PMSUSPENDED_UNKNOWN = 0, + +#ifdef VIR_ENUM_SENTINELS + VIR_DOMAIN_PMSUSPENDED_LAST +#endif +} virDomainPMSuspendedReason;
/** * virDomainControlState: diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 10174ab..29ff556 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -511,7 +511,8 @@ VIR_ENUM_IMPL(virDomainState, VIR_DOMAIN_LAST, "paused", "shutdown", "shutoff", - "crashed") + "crashed", + "pmsuspended")
/* virDomainSnapshotState is really virDomainState plus one extra state */ VIR_ENUM_IMPL(virDomainSnapshotState, VIR_DOMAIN_SNAPSHOT_STATE_LAST, @@ -522,6 +523,7 @@ VIR_ENUM_IMPL(virDomainSnapshotState, VIR_DOMAIN_SNAPSHOT_STATE_LAST, "shutdown", "shutoff", "crashed", + "pmsuspended", "disk-snapshot")
I was wondering why we didn't add at the end but that's normal based on virDomainSnapshotState comment.
#define VIR_DOMAIN_NOSTATE_LAST (VIR_DOMAIN_NOSTATE_UNKNOWN + 1) @@ -14308,14 +14310,32 @@ virDomainObjSetState(virDomainObjPtr dom, virDomainState state, int reason) int last = -1;
switch (state) { - case VIR_DOMAIN_NOSTATE: last = VIR_DOMAIN_NOSTATE_LAST; break; - case VIR_DOMAIN_RUNNING: last = VIR_DOMAIN_RUNNING_LAST; break; - case VIR_DOMAIN_BLOCKED: last = VIR_DOMAIN_BLOCKED_LAST; break; - case VIR_DOMAIN_PAUSED: last = VIR_DOMAIN_PAUSED_LAST; break; - case VIR_DOMAIN_SHUTDOWN: last = VIR_DOMAIN_SHUTDOWN_LAST; break; - case VIR_DOMAIN_SHUTOFF: last = VIR_DOMAIN_SHUTOFF_LAST; break; - case VIR_DOMAIN_CRASHED: last = VIR_DOMAIN_CRASHED_LAST; break; - default: last = -1; + case VIR_DOMAIN_NOSTATE: + last = VIR_DOMAIN_NOSTATE_LAST; + break; + case VIR_DOMAIN_RUNNING: + last = VIR_DOMAIN_RUNNING_LAST; + break; + case VIR_DOMAIN_BLOCKED: + last = VIR_DOMAIN_BLOCKED_LAST; + break; + case VIR_DOMAIN_PAUSED: + last = VIR_DOMAIN_PAUSED_LAST; + break; + case VIR_DOMAIN_SHUTDOWN: + last = VIR_DOMAIN_SHUTDOWN_LAST; + break; + case VIR_DOMAIN_SHUTOFF: + last = VIR_DOMAIN_SHUTOFF_LAST; + break; + case VIR_DOMAIN_CRASHED: + last = VIR_DOMAIN_CRASHED_LAST; + break; + case VIR_DOMAIN_PMSUSPENDED: + last = VIR_DOMAIN_PMSUSPENDED_LAST; + break; + default: + last = -1; }
if (last < 0) { diff --git a/tools/virsh.c b/tools/virsh.c index 630b77f..7ef9807 100644 --- a/tools/virsh.c +++ b/tools/virsh.c @@ -18817,6 +18817,8 @@ vshDomainStateToString(int state) return N_("shut off"); case VIR_DOMAIN_CRASHED: return N_("crashed"); + case VIR_DOMAIN_PMSUSPENDED: + return N_("pmsuspended"); case VIR_DOMAIN_NOSTATE: default: ;/*FALLTHROUGH*/ @@ -18930,6 +18932,14 @@ vshDomainStateReasonToString(int state, int reason) } break;
+ case VIR_DOMAIN_PMSUSPENDED: + switch ((virDomainPMSuspendedReason) reason) { + case VIR_DOMAIN_PMSUSPENDED_UNKNOWN: + case VIR_DOMAIN_PMSUSPENDED_LAST: + ; + } + break; + case VIR_DOMAIN_LAST: ; } diff --git a/tools/virsh.pod b/tools/virsh.pod index 64b00ee..88d04a5 100644 --- a/tools/virsh.pod +++ b/tools/virsh.pod @@ -327,7 +327,7 @@ State is the run state (see below).
B<STATES>
-The State field lists 7 states for a domain, and which ones the +The State field lists 8 states for a domain, and which ones the current domain is in.
=over 4 @@ -371,6 +371,11 @@ restart on crash. The domain is in process of dying, but hasn't completely shutdown or crashed.
+=item B<pmsuspended> + +The domain has been suspended by guest power management, e.g. entered +into s3 state. + =back
If I<--managed-save> is specified, then domains that have managed save
ACK, Daniel -- Daniel Veillard | libxml Gnome XML XSLT toolkit http://xmlsoft.org/ daniel@veillard.com | Rpmfind RPM search engine http://rpmfind.net/ http://veillard.com/ | virtualization library http://libvirt.org/