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(a)veillard.com | Rpmfind RPM search engine
http://rpmfind.net/
http://veillard.com/ | virtualization library
http://libvirt.org/