[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

[libvirt] [PATCH 1/5 V3] libvirt: Add new public API virDomainGetPcpusUsage



Signed-off-by: Lai Jiangshan <laijs cn fujitsu com>
---
 include/libvirt/libvirt.h.in |    5 ++++
 python/generator.py          |    1 +
 src/driver.h                 |    7 +++++
 src/libvirt.c                |   51 ++++++++++++++++++++++++++++++++++++++++++
 src/libvirt_public.syms      |    5 ++++
 5 files changed, 69 insertions(+), 0 deletions(-)

diff --git a/include/libvirt/libvirt.h.in b/include/libvirt/libvirt.h.in
index e436f3c..167e89f 100644
--- a/include/libvirt/libvirt.h.in
+++ b/include/libvirt/libvirt.h.in
@@ -3606,6 +3606,11 @@ int virConnectSetKeepAlive(virConnectPtr conn,
                            int interval,
                            unsigned int count);
 
+int virDomainGetPcpusUsage(virDomainPtr dom,
+                           unsigned long long *usages,
+                           int *nr_usages,
+                           unsigned int flags);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/python/generator.py b/python/generator.py
index 6fee3a4..0311004 100755
--- a/python/generator.py
+++ b/python/generator.py
@@ -421,6 +421,7 @@ skip_impl = (
     'virDomainGetBlockIoTune',
     'virDomainSetInterfaceParameters',
     'virDomainGetInterfaceParameters',
+    'virDomainGetPcpusUsage', # not implemented yet
 )
 
 qemu_skip_impl = (
diff --git a/src/driver.h b/src/driver.h
index 24636a4..2a3c46d 100644
--- a/src/driver.h
+++ b/src/driver.h
@@ -794,6 +794,12 @@ typedef int
                                   int *nparams,
                                   unsigned int flags);
 
+typedef int
+    (*virDrvDomainGetPcpusUsage)(virDomainPtr dom,
+                                 unsigned long long *usages,
+                                 int *nr_usages,
+                                 unsigned int flags);
+
 /**
  * _virDriver:
  *
@@ -962,6 +968,7 @@ struct _virDriver {
     virDrvNodeSuspendForDuration nodeSuspendForDuration;
     virDrvDomainSetBlockIoTune domainSetBlockIoTune;
     virDrvDomainGetBlockIoTune domainGetBlockIoTune;
+    virDrvDomainGetPcpusUsage domainGetPcpusUsage;
 };
 
 typedef int
diff --git a/src/libvirt.c b/src/libvirt.c
index a540424..bd19bf5 100644
--- a/src/libvirt.c
+++ b/src/libvirt.c
@@ -17882,3 +17882,54 @@ error:
     virDispatchError(dom->conn);
     return -1;
 }
+
+/**
+ * virDomainGetPcpusUsage:
+ * @dom: pointer to domain object
+ * @usages: returned physical cpu usages
+ * @nr_usages: length of @usages
+ * @flags: flags to control the operation
+ *
+ * Get the cpu usages for every physical cpu since the domain started (in nanoseconds).
+ *
+ * Returns 0 if success, -1 on error
+ */
+int virDomainGetPcpusUsage(virDomainPtr dom,
+                           unsigned long long *usages,
+                           int *nr_usages,
+                           unsigned int flags)
+{
+    virConnectPtr conn;
+
+    VIR_DOMAIN_DEBUG(dom, "usages=%p, nr_usages=%d, flags=%x",
+                     usages, (nr_usages) ? *nr_usages : -1, flags);
+
+    virResetLastError();
+
+    if (!VIR_IS_CONNECTED_DOMAIN (dom)) {
+        virLibDomainError(VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
+        virDispatchError(NULL);
+        return -1;
+    }
+
+    if (nr_usages == NULL && *nr_usages != 0) {
+        virLibDomainError(VIR_ERR_INVALID_ARG, __FUNCTION__);
+        goto error;
+    }
+
+    conn = dom->conn;
+
+    if (conn->driver->domainGetPcpusUsage) {
+        int ret;
+        ret = conn->driver->domainGetPcpusUsage(dom, usages, nr_usages, flags);
+        if (ret < 0)
+            goto error;
+        return ret;
+    }
+
+    virLibDomainError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
+
+error:
+    virDispatchError(dom->conn);
+    return -1;
+}
diff --git a/src/libvirt_public.syms b/src/libvirt_public.syms
index 4ca7216..15d944c 100644
--- a/src/libvirt_public.syms
+++ b/src/libvirt_public.syms
@@ -516,4 +516,9 @@ LIBVIRT_0.9.9 {
         virDomainSetNumaParameters;
 } LIBVIRT_0.9.8;
 
+LIBVIRT_0.9.10 {
+    global:
+        virDomainGetPcpusUsage;
+} LIBVIRT_0.9.9;
+
 # .... define new API here using predicted next version number ....
-- 
1.7.4.4


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]