[libvirt] [PATCH 03/10] vz: move getting stats in vzDomainGetVcpus to the end

Nikolay Shirokovskiy nshirokovskiy at virtuozzo.com
Thu Jun 2 11:24:24 UTC 2016


As a preparation to get statistics without domain lock. Let's
take all we want from domain cache first. After this point
domain lock can be dropped.

Signed-off-by: Nikolay Shirokovskiy <nshirokovskiy at virtuozzo.com>
---
 src/vz/vz_driver.c | 37 +++++++++++++++++++++----------------
 1 file changed, 21 insertions(+), 16 deletions(-)

diff --git a/src/vz/vz_driver.c b/src/vz/vz_driver.c
index 0609594..62d5047 100644
--- a/src/vz/vz_driver.c
+++ b/src/vz/vz_driver.c
@@ -885,24 +885,29 @@ vzDomainGetVcpus(virDomainPtr domain,
         goto cleanup;
     }
 
-    if (maxinfo >= 1) {
-        if (info != NULL) {
-            memset(info, 0, sizeof(*info) * maxinfo);
-            for (i = 0; i < maxinfo; i++) {
-                info[i].number = i;
-                info[i].state = VIR_VCPU_RUNNING;
-                if (prlsdkGetVcpuStats(privdom, i, &info[i].cpuTime) < 0)
-                    goto cleanup;
-            }
-        }
-        if (cpumaps != NULL) {
-            memset(cpumaps, 0, maplen * maxinfo);
-            for (i = 0; i < maxinfo; i++)
-                virBitmapToDataBuf(privdom->def->cpumask,
-                                   VIR_GET_CPUMAP(cpumaps, maplen, i),
-                                   maplen);
+    if (maxinfo < 1) {
+        ret = 0;
+        goto cleanup;
+    }
+
+    if (cpumaps != NULL) {
+        memset(cpumaps, 0, maplen * maxinfo);
+        for (i = 0; i < maxinfo; i++)
+            virBitmapToDataBuf(privdom->def->cpumask,
+                               VIR_GET_CPUMAP(cpumaps, maplen, i),
+                               maplen);
+    }
+
+    if (info != NULL) {
+        memset(info, 0, sizeof(*info) * maxinfo);
+        for (i = 0; i < maxinfo; i++) {
+            info[i].number = i;
+            info[i].state = VIR_VCPU_RUNNING;
+            if (prlsdkGetVcpuStats(privdom, i, &info[i].cpuTime) < 0)
+                goto cleanup;
         }
     }
+
     ret = maxinfo;
 
  cleanup:
-- 
1.8.3.1




More information about the libvir-list mailing list