Move libxlFreeMem from libxl_driver to libxl_domain for
use by other libxl modules. For consistency, rename to
libxlDomainFreeMem.
Signed-off-by: Jim Fehlig <jfehlig(a)suse.com>
---
src/libxl/libxl_domain.c | 39 +++++++++++++++++++++++++++++++++++++++
src/libxl/libxl_domain.h | 4 ++++
src/libxl/libxl_driver.c | 41 +----------------------------------------
3 files changed, 44 insertions(+), 40 deletions(-)
diff --git a/src/libxl/libxl_domain.c b/src/libxl/libxl_domain.c
index ef85790..6f7924c 100644
--- a/src/libxl/libxl_domain.c
+++ b/src/libxl/libxl_domain.c
@@ -840,3 +840,42 @@ cleanup:
VIR_FREE(cpumap);
return ret;
}
+
+int
+libxlDomainFreeMem(libxlDomainObjPrivatePtr priv, libxl_domain_config *d_config)
+{
+ uint32_t needed_mem;
+ uint32_t free_mem;
+ size_t i;
+ int ret = -1;
+ int tries = 3;
+ int wait_secs = 10;
+
+ if ((ret = libxl_domain_need_memory(priv->ctx, &d_config->b_info,
+ &needed_mem)) >= 0) {
+ for (i = 0; i < tries; ++i) {
+ if ((ret = libxl_get_free_memory(priv->ctx, &free_mem)) < 0)
+ break;
+
+ if (free_mem >= needed_mem) {
+ ret = 0;
+ break;
+ }
+
+ if ((ret = libxl_set_memory_target(priv->ctx, 0,
+ free_mem - needed_mem,
+ /* relative */ 1, 0)) < 0)
+ break;
+
+ ret = libxl_wait_for_free_memory(priv->ctx, 0, needed_mem,
+ wait_secs);
+ if (ret == 0 || ret != ERROR_NOMEM)
+ break;
+
+ if ((ret = libxl_wait_for_memory_target(priv->ctx, 0, 1)) < 0)
+ break;
+ }
+ }
+
+ return ret;
+}
diff --git a/src/libxl/libxl_domain.h b/src/libxl/libxl_domain.h
index 775a91c..7dacb36 100644
--- a/src/libxl/libxl_domain.h
+++ b/src/libxl/libxl_domain.h
@@ -127,4 +127,8 @@ int
libxlDomainSetVcpuAffinities(libxlDriverPrivatePtr driver,
virDomainObjPtr vm);
+int
+libxlDomainFreeMem(libxlDomainObjPrivatePtr priv,
+ libxl_domain_config *d_config);
+
#endif /* LIBXL_DOMAIN_H */
diff --git a/src/libxl/libxl_driver.c b/src/libxl/libxl_driver.c
index b511383..ffe9c13 100644
--- a/src/libxl/libxl_driver.c
+++ b/src/libxl/libxl_driver.c
@@ -304,45 +304,6 @@ const struct libxl_event_hooks ev_hooks = {
.disaster = NULL,
};
-static int
-libxlFreeMem(libxlDomainObjPrivatePtr priv, libxl_domain_config *d_config)
-{
- uint32_t needed_mem;
- uint32_t free_mem;
- size_t i;
- int ret = -1;
- int tries = 3;
- int wait_secs = 10;
-
- if ((ret = libxl_domain_need_memory(priv->ctx, &d_config->b_info,
- &needed_mem)) >= 0) {
- for (i = 0; i < tries; ++i) {
- if ((ret = libxl_get_free_memory(priv->ctx, &free_mem)) < 0)
- break;
-
- if (free_mem >= needed_mem) {
- ret = 0;
- break;
- }
-
- if ((ret = libxl_set_memory_target(priv->ctx, 0,
- free_mem - needed_mem,
- /* relative */ 1, 0)) < 0)
- break;
-
- ret = libxl_wait_for_free_memory(priv->ctx, 0, needed_mem,
- wait_secs);
- if (ret == 0 || ret != ERROR_NOMEM)
- break;
-
- if ((ret = libxl_wait_for_memory_target(priv->ctx, 0, 1)) < 0)
- break;
- }
- }
-
- return ret;
-}
-
/*
* Start a domain through libxenlight.
*
@@ -421,7 +382,7 @@ libxlVmStart(libxlDriverPrivatePtr driver, virDomainObjPtr vm,
if (libxlBuildDomainConfig(driver, vm, &d_config) < 0)
goto endjob;
- if (cfg->autoballoon && libxlFreeMem(priv, &d_config) < 0) {
+ if (cfg->autoballoon && libxlDomainFreeMem(priv, &d_config) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR,
_("libxenlight failed to get free memory for domain
'%s'"),
d_config.c_info.name);
--
1.8.1.4