From 59227b7a8fd3b891259a8a2b3154e17c3b5651d7 Mon Sep 17 00:00:00 2001 From: Roger Pau Monne Date: Tue, 8 Jul 2014 10:35:20 +0200 Subject: [PATCH] libxl: create PVH guests with max memory assigned MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Since PVH guests are very similar to HVM guests in terms of memory management, start the guest with the maximum memory assigned and let it balloon down. Signed-off-by: Roger Pau Monné Cc: Ian Jackson Cc: Ian Campbell Cc: Mukesh Rathor --- tools/libxl/libxl_dom.c | 13 ++++++++++--- 1 files changed, 10 insertions(+), 3 deletions(-) diff --git a/tools/libxl/libxl_dom.c b/tools/libxl/libxl_dom.c index 661999c..eada87d 100644 --- a/tools/libxl/libxl_dom.c +++ b/tools/libxl/libxl_dom.c @@ -233,6 +233,7 @@ int libxl__build_pre(libxl__gc *gc, uint32_t domid, libxl_domain_build_info *const info = &d_config->b_info; libxl_ctx *ctx = libxl__gc_owner(gc); char *xs_domid, *con_domid; + unsigned long mem; int rc; if (xc_domain_max_vcpus(ctx->xch, domid, info->max_vcpus) != 0) { @@ -263,8 +264,12 @@ int libxl__build_pre(libxl__gc *gc, uint32_t domid, libxl_domain_set_nodeaffinity(ctx, domid, &info->nodemap); libxl_set_vcpuaffinity_all(ctx, domid, info->max_vcpus, &info->cpumap); - if (xc_domain_setmaxmem(ctx->xch, domid, info->target_memkb + - LIBXL_MAXMEM_CONSTANT) < 0) { + if (info->type == LIBXL_DOMAIN_TYPE_PV) + mem = libxl_defbool_val(d_config->c_info.pvh) ? info->max_memkb : + info->target_memkb; + else + mem = info->target_memkb; + if (xc_domain_setmaxmem(ctx->xch, domid, mem + LIBXL_MAXMEM_CONSTANT) < 0) { LIBXL__LOG_ERRNO(ctx, LIBXL__LOG_ERROR, "Couldn't set max memory"); return ERROR_FAIL; } @@ -370,6 +375,7 @@ int libxl__build_pv(libxl__gc *gc, uint32_t domid, { libxl_ctx *ctx = libxl__gc_owner(gc); struct xc_dom_image *dom; + unsigned long mem; int ret; int flags = 0; @@ -440,7 +446,8 @@ int libxl__build_pv(libxl__gc *gc, uint32_t domid, LOGE(ERROR, "libxl__arch_domain_init_hw_description failed"); goto out; } - if ( (ret = xc_dom_mem_init(dom, info->target_memkb / 1024)) != 0 ) { + mem = state->pvh_enabled ? info->max_memkb : info->target_memkb; + if ( (ret = xc_dom_mem_init(dom, mem / 1024)) != 0 ) { LOGE(ERROR, "xc_dom_mem_init failed"); goto out; } -- 1.7.7.5 (Apple Git-26)