[libvirt] [PATCH 09/11] New domain state pmsuspended

Osier Yang jyang at redhat.com
Wed Mar 14 15:26:53 UTC 2012


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
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")
 
 #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
-- 
1.7.1




More information about the libvir-list mailing list