]> xenbits.xensource.com Git - libvirt.git/commitdiff
nodeinfo: Rename nodeGetFreeMemory to nodeGetMemory
authorMichal Privoznik <mprivozn@redhat.com>
Mon, 16 Jun 2014 12:02:34 +0000 (14:02 +0200)
committerMichal Privoznik <mprivozn@redhat.com>
Thu, 19 Jun 2014 13:10:49 +0000 (15:10 +0200)
For future work we want to get info for not only the free memory
but overall memory size too. That's why the function must have
new signature too.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
src/bhyve/bhyve_driver.c
src/libvirt_private.syms
src/lxc/lxc_driver.c
src/nodeinfo.c
src/nodeinfo.h
src/openvz/openvz_driver.c
src/qemu/qemu_driver.c
src/uml/uml_driver.c
src/vbox/vbox_tmpl.c

index 89f73ff3327b980da152f4baeed072a7140eaf0c..bb9bcb7916c614e6225cecfc35e83ff20d350256 100644 (file)
@@ -1244,10 +1244,15 @@ bhyveConnectGetMaxVcpus(virConnectPtr conn ATTRIBUTE_UNUSED,
 static unsigned long long
 bhyveNodeGetFreeMemory(virConnectPtr conn)
 {
+    unsigned long long freeMem;
+
     if (virNodeGetFreeMemoryEnsureACL(conn) < 0)
         return 0;
 
-    return nodeGetFreeMemory();
+    if (nodeGetMemory(NULL, &freeMem) < 0)
+        return 0;
+
+    return freeMem;
 }
 
 static int
index 19a2d654f64b804eada66f34351da9682e200ff5..6284d1181aa20e45db9b65d019716097255bfa27 100644 (file)
@@ -877,8 +877,8 @@ nodeGetCPUBitmap;
 nodeGetCPUCount;
 nodeGetCPUMap;
 nodeGetCPUStats;
-nodeGetFreeMemory;
 nodeGetInfo;
+nodeGetMemory;
 nodeGetMemoryParameters;
 nodeGetMemoryStats;
 nodeSetMemoryParameters;
index d2852a7db6e1a9d87aaba4c78f2df3ba6c2ca91e..ab227d0d0fa5a1e2464aaa9c9732003f20a7b29e 100644 (file)
@@ -5477,10 +5477,15 @@ lxcNodeGetCellsFreeMemory(virConnectPtr conn,
 static unsigned long long
 lxcNodeGetFreeMemory(virConnectPtr conn)
 {
+    unsigned long long freeMem;
+
     if (virNodeGetFreeMemoryEnsureACL(conn) < 0)
         return 0;
 
-    return nodeGetFreeMemory();
+    if (nodeGetMemory(NULL, &freeMem) < 0)
+        return 0;
+
+    return freeMem;
 }
 
 
index 5332edec7e383f0b1b7d83010571cdfa7a2c7cc9..fd831b460a11095305cd91655c93b9714f6b25fb 100644 (file)
@@ -1683,37 +1683,66 @@ nodeGetCellsFreeMemoryFake(unsigned long long *freeMems,
     return 1;
 }
 
-static unsigned long long
-nodeGetFreeMemoryFake(void)
+static int
+nodeGetMemoryFake(unsigned long long *mem,
+                  unsigned long long *freeMem)
 {
+    int ret = -1;
+
 #if defined(__FreeBSD__)
     unsigned long pagesize = getpagesize();
     u_int value;
     size_t value_size = sizeof(value);
-    unsigned long long freemem;
 
-    if (sysctlbyname("vm.stats.vm.v_free_count", &value,
-                     &value_size, NULL, 0) < 0) {
-        virReportSystemError(errno, "%s",
-                             _("sysctl failed for vm.stats.vm.v_free_count"));
-        return 0;
+    if (mem) {
+        if (sysctlbyname("vm.stats.vm.v_page_count", &value,
+                         &value_size, NULL, 0) < 0) {
+            virReportSystemError(errno, "%s",
+                                 _("sysctl failed for vm.stats.vm.v_page_count"));
+            goto cleanup;
+        }
+        *mem = value * (unsigned long long)pagesize;
     }
 
-    freemem = value * (unsigned long long)pagesize;
+    if (freeMem) {
+        if (sysctlbyname("vm.stats.vm.v_free_count", &value,
+                         &value_size, NULL, 0) < 0) {
+            virReportSystemError(errno, "%s",
+                                 _("sysctl failed for vm.stats.vm.v_free_count"));
+            goto cleanup;
+        }
+
+        *freeMem = value * (unsigned long long)pagesize;
+    }
 
-    return freemem;
 #else
-    double avail = physmem_available();
-    unsigned long long ret;
+    if (mem) {
+        double total = physmem_total();
+        if (!total) {
+            virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+                           _("Cannot determine free memory"));
+            goto cleanup;
+        }
 
-    if (!(ret = (unsigned long long)avail)) {
-        virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
-                       _("Cannot determine free memory"));
-        return 0;
+        *mem = (unsigned long long) total;
     }
 
-    return ret;
+    if (freeMem) {
+        double avail = physmem_available();
+
+        if (!avail) {
+            virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+                           _("Cannot determine free memory"));
+            goto cleanup;
+        }
+
+        *freeMem = (unsigned long long) avail;
+    }
 #endif
+
+    ret = 0;
+ cleanup:
+    return ret;
 }
 
 /* returns 1 on success, 0 if the detection failed and -1 on hard error */
@@ -1914,25 +1943,40 @@ nodeGetCellsFreeMemory(unsigned long long *freeMems,
     return ret;
 }
 
-unsigned long long
-nodeGetFreeMemory(void)
+int
+nodeGetMemory(unsigned long long *mem,
+              unsigned long long *freeMem)
 {
-    unsigned long long mem;
-    unsigned long long freeMem = 0;
     int max_node;
     int n;
 
+    if (mem)
+        *mem = 0;
+
+    if (freeMem)
+        *freeMem = 0;
+
     if (!virNumaIsAvailable())
-        return nodeGetFreeMemoryFake();
+        return nodeGetMemoryFake(mem, freeMem);
 
     if ((max_node = virNumaGetMaxNode()) < 0)
-        return 0;
+        return -1;
 
     for (n = 0; n <= max_node; n++) {
-        virNumaGetNodeMemory(n, NULL, &mem);
+        unsigned long long tmp_mem = 0, tmp_freeMem = 0;
+
+        if (!virNumaNodeIsAvailable(n))
+            continue;
+
+        if (virNumaGetNodeMemory(n, &tmp_mem, &tmp_freeMem) < 0)
+            return -1;
 
-        freeMem += mem;
+        if (mem)
+            *mem += tmp_mem;
+
+        if (freeMem)
+            *freeMem += tmp_freeMem;
     }
 
-    return freeMem;
+    return 0;
 }
index c81fcbb0f1ac91fbc1ffb9c6e5f1a8a42fa04cf6..e7ec144f214f6d889a8276ddf2dea40f80652184 100644 (file)
@@ -40,7 +40,8 @@ int nodeGetMemoryStats(int cellNum,
 int nodeGetCellsFreeMemory(unsigned long long *freeMems,
                            int startCell,
                            int maxCells);
-unsigned long long nodeGetFreeMemory(void);
+int nodeGetMemory(unsigned long long *mem,
+                  unsigned long long *freeMem);
 
 virBitmapPtr nodeGetCPUBitmap(int *max_id);
 int nodeGetCPUCount(void);
index 87df2a71fc0044f707370872fde5c6734ef853ab..4c815ed41e371530150ebbc190dec6db63e269c2 100644 (file)
@@ -2180,7 +2180,10 @@ openvzNodeGetCellsFreeMemory(virConnectPtr conn ATTRIBUTE_UNUSED,
 static unsigned long long
 openvzNodeGetFreeMemory(virConnectPtr conn ATTRIBUTE_UNUSED)
 {
-    return nodeGetFreeMemory();
+    unsigned long long freeMem;
+    if (nodeGetMemory(NULL, &freeMem) < 0)
+        return 0;
+    return freeMem;
 }
 
 
index ca58d6bfd1c2dea188ce9ebfa96368e47306540d..f359d8fd35ac63c761ecf6bdffba1960c5be41ff 100644 (file)
@@ -16605,10 +16605,15 @@ qemuNodeGetCellsFreeMemory(virConnectPtr conn,
 static unsigned long long
 qemuNodeGetFreeMemory(virConnectPtr conn)
 {
+    unsigned long long freeMem;
+
     if (virNodeGetFreeMemoryEnsureACL(conn) < 0)
         return 0;
 
-    return nodeGetFreeMemory();
+    if (nodeGetMemory(NULL, &freeMem) < 0)
+        return 0;
+
+    return freeMem;
 }
 
 
index 1e0ec0e406be25136ff0025bc5e427bc1e84feba..a5e9ea8b0f10582c25eb642ee04a37ea4a3ac618 100644 (file)
@@ -2806,10 +2806,15 @@ umlNodeGetCellsFreeMemory(virConnectPtr conn,
 static unsigned long long
 umlNodeGetFreeMemory(virConnectPtr conn)
 {
+    unsigned long long freeMem;
+
     if (virNodeGetFreeMemoryEnsureACL(conn) < 0)
         return 0;
 
-    return nodeGetFreeMemory();
+    if (nodeGetMemory(NULL, &freeMem) < 0)
+        return 0;
+
+    return freeMem;
 }
 
 
index 6365f2ab91c0854aa79389e3c7010ce34a82f021..a80da69617c969e158076114233756329d25bfeb 100644 (file)
@@ -11476,7 +11476,10 @@ vboxNodeGetCellsFreeMemory(virConnectPtr conn ATTRIBUTE_UNUSED,
 static unsigned long long
 vboxNodeGetFreeMemory(virConnectPtr conn ATTRIBUTE_UNUSED)
 {
-    return nodeGetFreeMemory();
+    unsigned long long freeMem;
+    if (nodeGetMemory(NULL, &freeMem) < 0)
+        return 0;
+    return freeMem;
 }