]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
Add new 'availheap' sysctl variant for ABI changes in Xen
authorDaniel P. Berrange <berrange@redhat.com>
Tue, 16 Jun 2009 09:31:19 +0000 (09:31 +0000)
committerDaniel P. Berrange <berrange@redhat.com>
Tue, 16 Jun 2009 09:31:19 +0000 (09:31 +0000)
ChangeLog
src/xen_internal.c

index 3f02dac6177efa23270e82a4a4c9c1166ce6a63e..bccfc6a6637ba90b29c95cc8992eed7f5ceafce3 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Tue Jun 16 10:30:22 BST 2009 Daniel P. Berrange <berrange@redhat.com>
+
+       * src/xen_internal.c: Add new variant of availheap sysctl
+       for ABI changes in Xen
+
 Mon Jun 15 18:15:22 BST 2009 Daniel P. Berrange <berrange@redhat.com>
 
        Fix build on non-Linux targets
index 186cead8e2e3f52d226318baa8646c1ede531e84..cc5a8f93104be143da5ff20fa1226ee850240339 100644 (file)
@@ -241,6 +241,15 @@ struct xen_v2s4_availheap {
 
 typedef struct xen_v2s4_availheap  xen_v2s4_availheap;
 
+struct xen_v2s5_availheap {
+    uint32_t min_bitwidth;  /* Smallest address width (zero if don't care). */
+    uint32_t max_bitwidth;  /* Largest address width (zero if don't care). */
+    int32_t  node;          /* NUMA node (-1 for sum across all nodes). */
+    uint64_t avail_bytes ALIGN_64;   /* Bytes available in the specified region. */
+};
+
+typedef struct xen_v2s5_availheap  xen_v2s5_availheap;
+
 
 #define XEN_GETDOMAININFOLIST_ALLOC(domlist, size)                      \
     (hypervisor_version < 2 ?                                           \
@@ -650,6 +659,7 @@ struct xen_op_v2_sys {
         xen_v2s3_getdomaininfolistop getdomaininfolists3;
         xen_v2_getschedulerid        getschedulerid;
         xen_v2s4_availheap           availheap;
+        xen_v2s5_availheap           availheap5;
         uint8_t padding[128];
     } u;
 };
@@ -3125,12 +3135,18 @@ xenHypervisorNodeGetCellsFreeMemory(virConnectPtr conn, unsigned long long *free
     op_sys.cmd = XEN_V2_OP_GETAVAILHEAP;
 
     for (i = startCell, j = 0;(i < priv->nbNodeCells) && (j < maxCells);i++,j++) {
-        op_sys.u.availheap.node = i;
+        if (sys_interface_version >= 5)
+            op_sys.u.availheap5.node = i;
+        else
+            op_sys.u.availheap.node = i;
         ret = xenHypervisorDoV2Sys(priv->handle, &op_sys);
         if (ret < 0) {
             return(-1);
         }
-        freeMems[j] = op_sys.u.availheap.avail_bytes;
+        if (sys_interface_version >= 5)
+            freeMems[j] = op_sys.u.availheap5.avail_bytes;
+        else
+            freeMems[j] = op_sys.u.availheap.avail_bytes;
     }
     return (j);
 }