Upcoming changes will use different LIBXL_API_VERSION variants.
Prepare libxl_get_free_memory, which changed storage size of parameter
"memkb" in Xen 4.8.
No functional change intended.
Signed-off-by: Olaf Hering <olaf(a)aepfle.de>
---
src/libxl/libxl_api.h | 19 +++++++++++++++++++
src/libxl/libxl_conf.c | 5 +++--
src/libxl/libxl_domain.c | 4 ++--
tests/libxlmock.c | 7 ++++++-
4 files changed, 30 insertions(+), 5 deletions(-)
diff --git a/src/libxl/libxl_api.h b/src/libxl/libxl_api.h
index 5c1545c3c0..1c13781ae6 100644
--- a/src/libxl/libxl_api.h
+++ b/src/libxl/libxl_api.h
@@ -138,3 +138,22 @@ Libxl_Domain_Need_Memory(libxl_ctx *ctx,
return ret;
}
+
+static inline int
+Libxl_Get_Free_Memory(libxl_ctx *ctx, uint64_t *memkb)
+{
+ int ret;
+
+#if LIBXL_API_VERSION < 0x040800
+ {
+ uint32_t val32 = 0;
+
+ ret = libxl_get_free_memory(ctx, &val32);
+ *memkb = val32;
+ }
+#else
+ ret = libxl_get_free_memory(ctx, memkb);
+#endif
+
+ return ret;
+}
diff --git a/src/libxl/libxl_conf.c b/src/libxl/libxl_conf.c
index 4b6a7e6096..74551ff804 100644
--- a/src/libxl/libxl_conf.c
+++ b/src/libxl/libxl_conf.c
@@ -36,6 +36,7 @@
#include "viruuid.h"
#include "vircommand.h"
#include "virsocketaddr.h"
+#include "libxl_api.h"
#include "libxl_domain.h"
#include "libxl_conf.h"
#include "libxl_utils.h"
@@ -1785,7 +1786,7 @@ libxlDriverConfigNew(void)
int
libxlDriverConfigInit(libxlDriverConfigPtr cfg)
{
- unsigned int free_mem;
+ uint64_t free_mem;
if (g_mkdir_with_parents(cfg->logDir, 0777) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR,
@@ -1817,7 +1818,7 @@ libxlDriverConfigInit(libxlDriverConfigPtr cfg)
/* This will fill xenstore info about free and dom0 memory if missing,
* should be called before starting first domain */
- if (libxl_get_free_memory(cfg->ctx, &free_mem)) {
+ if (Libxl_Get_Free_Memory(cfg->ctx, &free_mem)) {
VIR_ERROR(_("Unable to configure libxl's memory management
parameters"));
return -1;
}
diff --git a/src/libxl/libxl_domain.c b/src/libxl/libxl_domain.c
index 337764b5c7..264a730c6c 100644
--- a/src/libxl/libxl_domain.c
+++ b/src/libxl/libxl_domain.c
@@ -1009,7 +1009,7 @@ static int
libxlDomainFreeMem(libxl_ctx *ctx, libxl_domain_config *d_config)
{
uint64_t needed_mem;
- uint32_t free_mem;
+ uint64_t free_mem;
int32_t target_mem;
int tries = 3;
int wait_secs = 10;
@@ -1018,7 +1018,7 @@ libxlDomainFreeMem(libxl_ctx *ctx, libxl_domain_config *d_config)
goto error;
do {
- if (libxl_get_free_memory(ctx, &free_mem) < 0)
+ if (Libxl_Get_Free_Memory(ctx, &free_mem) < 0)
goto error;
if (free_mem >= needed_mem)
diff --git a/tests/libxlmock.c b/tests/libxlmock.c
index a36ca135f6..7a43f9196b 100644
--- a/tests/libxlmock.c
+++ b/tests/libxlmock.c
@@ -67,7 +67,12 @@ VIR_MOCK_IMPL_RET_ARGS(libxl_get_version_info,
VIR_MOCK_STUB_RET_ARGS(libxl_get_free_memory,
int, 0,
libxl_ctx *, ctx,
- uint32_t *, memkb);
+#if LIBXL_API_VERSION < 0x040800
+ uint32_t *,
+#else
+ uint64_t *,
+#endif
+ memkb);
VIR_MOCK_STUB_RET_ARGS(xc_interface_close,
int, 0,