
On Thu, Dec 10, 2015 at 20:26:31 +0530, Shivaprasad G Bhat wrote:
As of now, the cur_ballon is set to actual memory if not specified by the user. When the user specified memory is not aligned the cur_balloon alone ends up unaligned. For qemu in function qemuDomainAttachMemory(), the cur_balloon wouldn't add up to the actual memory as the cur_ballon was not aligned. So, there is need for explicit setmem post attach-device for such guests.
The decision as to whether to align the cur_balloon memory or not is not possible if we set it to actual memory by default in post-parse. Move the default cur_balloon assignment to their respective drivers during domain start wherever possible. For qemu align the cur_balloon too iow assign the aligned actual memory when not specified by the user.
Signed-off-by: Shivaprasad G Bhat <sbhat@linux.vnet.ibm.com> ---
Sorry for the delay. I was on christmas hollidays and I'm catching up with stuff that nappened earlier.
src/conf/domain_conf.c | 3 +-- src/libxl/libxl_conf.c | 2 ++ src/lxc/lxc_process.c | 3 +++ src/openvz/openvz_driver.c | 13 +++++++------ src/phyp/phyp_driver.c | 10 +++------- src/qemu/qemu_domain.c | 3 +++ src/uml/uml_conf.c | 3 +++ src/vbox/vbox_common.c | 3 +++ src/vmx/vmx.c | 3 +++ src/vz/vz_sdk.c | 3 +++ src/xenconfig/xen_common.c | 3 +++ src/xenconfig/xen_sxpr.c | 4 ++++ 12 files changed, 38 insertions(+), 15 deletions(-)
So at first: This breaks lxcconf2xmltest: TEST: lxcconf2xmltest !.!!!!!!!!!! 12 FAIL
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 2f5c0ed..68338f4 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -3527,8 +3527,7 @@ virDomainDefPostParseMemory(virDomainDefPtr def, return -1; }
- if (def->mem.cur_balloon > virDomainDefGetMemoryActual(def) || - def->mem.cur_balloon == 0) + if (def->mem.cur_balloon > virDomainDefGetMemoryActual(def)) def->mem.cur_balloon = virDomainDefGetMemoryActual(def);
It probably would be better to add a bool that signalizes that this field was not provided by the user (at the point where cur_balloon gets parsed) and then just modify the qemu code when starting to override the number.
if ((def->mem.max_memory || def->mem.memory_slots) && diff --git a/src/libxl/libxl_conf.c b/src/libxl/libxl_conf.c index 4eed5ca..6b6e764 100644 --- a/src/libxl/libxl_conf.c +++ b/src/libxl/libxl_conf.c @@ -665,6 +665,8 @@ libxlMakeDomBuildInfo(virDomainDefPtr def, } b_info->sched_params.weight = 1000; b_info->max_memkb = virDomainDefGetMemoryInitial(def); + if (!def->mem.cur_balloon) + def->mem.cur_balloon = virDomainDefGetMemoryInitial(def);
You then won't have to change any other driver, while making it work for qemu. Additionally it will not break the lxc test.
b_info->target_memkb = def->mem.cur_balloon; if (hvm) { char bootorder[VIR_DOMAIN_BOOT_LAST + 1];