On Fri, Jun 12, 2009 at 03:44:50PM +0100, Daniel P. Berrange wrote:
On Thu, Jun 11, 2009 at 02:37:57PM -0400, Hany Fahim wrote:
> Thanks Daniel,
> Is it fair to assume this fix may appear in the next release of libvirt?
If you want to build from source, I'd appreciate feedback on whether
the following patch fixes the problem
diff -r f204769dd197 src/xen_internal.c
--- a/src/xen_internal.c Wed Jun 03 13:52:06 2009 +0000
+++ b/src/xen_internal.c Fri Jun 12 15:44:05 2009 +0100
@@ -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(virC
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);
}
Looks fine to me, ACK.
Just one small worry, did we precisely identify when the change
happened ? In xenHypervisorInit we go directly from sys_interface_version
of 4 to 6, we never try 5 as far as I can see.
Daniel
--
Daniel Veillard | libxml Gnome XML XSLT toolkit
http://xmlsoft.org/
daniel(a)veillard.com | Rpmfind RPM search engine
http://rpmfind.net/
http://veillard.com/ | virtualization library
http://libvirt.org/