]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
Introduce virDomainPMWakeup API
authorMichal Privoznik <mprivozn@redhat.com>
Fri, 10 Feb 2012 11:40:52 +0000 (12:40 +0100)
committerMichal Privoznik <mprivozn@redhat.com>
Mon, 27 Feb 2012 10:43:59 +0000 (11:43 +0100)
This API allows a domain which previously called
virDomainPMSuspendForDuration() to be woken up.

include/libvirt/libvirt.h.in
src/driver.h
src/libvirt.c
src/libvirt_public.syms
src/remote/remote_driver.c
src/remote/remote_protocol.x
src/remote_protocol-structs

index e29df2a1d83db11357f321496480d5bb8b92fa10..6238ebb4330e6ac2b23e2c3837555bbbe311de64 100644 (file)
@@ -1251,6 +1251,8 @@ int                     virDomainPMSuspendForDuration (virDomainPtr domain,
                                                        unsigned int target,
                                                        unsigned long long duration,
                                                        unsigned int flags);
+int                     virDomainPMWakeup       (virDomainPtr domain,
+                                                 unsigned int flags);
 /*
  * Domain save/restore
  */
index b04b25464995324ef81edc6ac53f819c0ffef424..40ff194f63a6901cf0e495fe4f16c59886430407 100644 (file)
@@ -124,6 +124,9 @@ typedef int
                                              unsigned int target,
                                              unsigned long long duration,
                                              unsigned int flags);
+typedef int
+        (*virDrvDomainPMWakeup)     (virDomainPtr domain,
+                                     unsigned int flags);
 typedef int
         (*virDrvDomainShutdown)                (virDomainPtr domain);
 typedef int
@@ -867,8 +870,9 @@ struct _virDriver {
     virDrvDomainLookupByUUID   domainLookupByUUID;
     virDrvDomainLookupByName   domainLookupByName;
     virDrvDomainSuspend                domainSuspend;
-    virDrvDomainPMSuspendForDuration domainPMSuspendForDuration;
     virDrvDomainResume         domainResume;
+    virDrvDomainPMSuspendForDuration domainPMSuspendForDuration;
+    virDrvDomainPMWakeup    domainPMWakeup;
     virDrvDomainShutdown               domainShutdown;
     virDrvDomainShutdownFlags   domainShutdownFlags;
     virDrvDomainReboot         domainReboot;
index cbb41194c0b9941605b2d39ece6b29ebb470e7d4..8f98047fb7cff3b0d2d1024027817f0916d62cad 100644 (file)
@@ -2514,6 +2514,56 @@ error:
     return -1;
 }
 
+/**
+ * virDomainPMWakeup:
+ * @dom: a domain object
+ * @flags: extra flags; not used yet, so callers should always pass 0
+ *
+ * Inject a wakeup into the guest that previously used
+ * virDomainPMSuspendForDuration, rather than waiting for the
+ * previously requested duration (if any) to elapse.
+ *
+ * Returns: 0 on success,
+ *          -1 on failure.
+ */
+int
+virDomainPMWakeup(virDomainPtr dom,
+                  unsigned int flags)
+{
+    virConnectPtr conn;
+
+    VIR_DOMAIN_DEBUG(dom, "flags=%x", flags);
+
+    virResetLastError();
+
+    if (!VIR_IS_CONNECTED_DOMAIN(dom)) {
+        virLibDomainError(VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
+        virDispatchError(NULL);
+        return -1;
+    }
+
+    conn = dom->conn;
+
+    if (conn->flags & VIR_CONNECT_RO) {
+        virLibConnError(VIR_ERR_OPERATION_DENIED, __FUNCTION__);
+        goto error;
+    }
+
+    if (conn->driver->domainPMWakeup) {
+        int ret;
+        ret = conn->driver->domainPMWakeup(dom, flags);
+        if (ret < 0)
+            goto error;
+        return ret;
+    }
+
+    virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
+
+error:
+    virDispatchError(conn);
+    return -1;
+}
+
 /**
  * virDomainSave:
  * @domain: a domain object
index 7622b796ddd1101a3be76b8d0ba5dd9d48f80634..46c13fbfdcd7b962785b1b5b6ba684ae374d2ebf 100644 (file)
@@ -529,4 +529,9 @@ LIBVIRT_0.9.10 {
         virStorageVolWipePattern;
 } LIBVIRT_0.9.9;
 
+LIBVIRT_0.9.11 {
+    global:
+        virDomainPMWakeup;
+} LIBVIRT_0.9.10;
+
 # .... define new API here using predicted next version number ....
index bcd78eedb120828d66fbe10d07ca6ab4440b1736..9e74cea3119639795d2d3865c08d618b2dc4a3ad 100644 (file)
@@ -4781,6 +4781,7 @@ static virDriver remote_driver = {
     .domainSuspend = remoteDomainSuspend, /* 0.3.0 */
     .domainResume = remoteDomainResume, /* 0.3.0 */
     .domainPMSuspendForDuration = remoteDomainPMSuspendForDuration, /* 0.9.10 */
+    .domainPMWakeup = remoteDomainPMWakeup, /* 0.9.11 */
     .domainShutdown = remoteDomainShutdown, /* 0.3.0 */
     .domainShutdownFlags = remoteDomainShutdownFlags, /* 0.9.10 */
     .domainReboot = remoteDomainReboot, /* 0.3.0 */
index 59774b29abdebc37f4c56c4e3f0bf6cfe0457685..4d845e74b82339e4477177809c810ade3e3b9b92 100644 (file)
@@ -752,6 +752,10 @@ struct remote_domain_suspend_args {
     remote_nonnull_domain dom;
 };
 
+struct remote_domain_resume_args {
+    remote_nonnull_domain dom;
+};
+
 struct remote_domain_pm_suspend_for_duration_args {
     remote_nonnull_domain dom;
     unsigned int target;
@@ -759,8 +763,9 @@ struct remote_domain_pm_suspend_for_duration_args {
     unsigned int flags;
 };
 
-struct remote_domain_resume_args {
+struct remote_domain_pm_wakeup_args {
     remote_nonnull_domain dom;
+    unsigned int flags;
 };
 
 struct remote_domain_shutdown_args {
@@ -2759,7 +2764,8 @@ enum remote_procedure {
     REMOTE_PROC_DOMAIN_GET_DISK_ERRORS = 263, /* skipgen skipgen */
     REMOTE_PROC_DOMAIN_SET_METADATA = 264, /* autogen autogen */
     REMOTE_PROC_DOMAIN_GET_METADATA = 265, /* autogen autogen */
-    REMOTE_PROC_DOMAIN_BLOCK_REBASE = 266 /* autogen autogen */
+    REMOTE_PROC_DOMAIN_BLOCK_REBASE = 266, /* autogen autogen */
+    REMOTE_PROC_DOMAIN_PM_WAKEUP = 267 /* autogen autogen */
 
     /*
      * Notice how the entries are grouped in sets of 10 ?
index 8492bee6a850cb51d916c38d9a22f4099e11f174..8f882b74bd4a35787d52063453812e779f224942 100644 (file)
@@ -444,14 +444,18 @@ struct remote_domain_lookup_by_name_ret {
 struct remote_domain_suspend_args {
         remote_nonnull_domain      dom;
 };
+struct remote_domain_resume_args {
+        remote_nonnull_domain      dom;
+};
 struct remote_domain_pm_suspend_for_duration_args {
         remote_nonnull_domain      dom;
         u_int                      target;
         uint64_t                   duration;
         u_int                      flags;
 };
-struct remote_domain_resume_args {
+struct remote_domain_pm_wakeup_args {
         remote_nonnull_domain      dom;
+        u_int                      flags;
 };
 struct remote_domain_shutdown_args {
         remote_nonnull_domain      dom;
@@ -2173,4 +2177,5 @@ enum remote_procedure {
         REMOTE_PROC_DOMAIN_SET_METADATA = 264,
         REMOTE_PROC_DOMAIN_GET_METADATA = 265,
         REMOTE_PROC_DOMAIN_BLOCK_REBASE = 266,
+        REMOTE_PROC_DOMAIN_PM_WAKEUP = 267,
 };