diff --git a/tools/virsh.c b/tools/virsh.c index a718abf09d..e186c757c7 100644 --- a/tools/virsh.c +++ b/tools/virsh.c @@ -2932,6 +2932,7 @@ static const vshCmdOptDef opts_setmem[] = { {"kilobytes", VSH_OT_INT, VSH_OFLAG_REQ, N_("number of kilobytes of memory")}, {"config", VSH_OT_BOOL, 0, N_("affect next boot")}, {"live", VSH_OT_BOOL, 0, N_("affect running domain")}, + {"current", VSH_OT_BOOL, 0, N_("affect current domain")}, {NULL, 0, 0, NULL} }; @@ -2944,14 +2945,23 @@ cmdSetmem(vshControl *ctl, const vshCmd *cmd) int ret = TRUE; int config = vshCommandOptBool(cmd, "config"); int live = vshCommandOptBool(cmd, "live"); + int current = vshCommandOptBool(cmd, "current"); int flags = 0; - /* Need to use flags if config was specified, but prefer older api - * for live-only behavior otherwise */ - if (config) { - flags = VIR_DOMAIN_MEM_CONFIG; + if (current) { + if (live || config) { + vshError(ctl, "%s", _("--current must be specified exclusively")); + return FALSE; + } + flags = VIR_DOMAIN_MEM_CURRENT; + } else { + if (config) + flags |= VIR_DOMAIN_MEM_CONFIG; if (live) flags |= VIR_DOMAIN_MEM_LIVE; + /* neither option is specified */ + if (!live && !config) + flags = -1; } if (!vshConnectionUsability(ctl, ctl->conn)) @@ -2984,7 +2994,7 @@ cmdSetmem(vshControl *ctl, const vshCmd *cmd) return FALSE; } - if (!flags) { + if (flags == -1) { if (virDomainSetMemory(dom, kilobytes) != 0) { ret = FALSE; } diff --git a/tools/virsh.pod b/tools/virsh.pod index 6319373be8..580e1dcb96 100644 --- a/tools/virsh.pod +++ b/tools/virsh.pod @@ -583,11 +583,15 @@ B: The weight and cap parameters are defined only for the XEN_CREDIT scheduler and are now I. =item B I B optional I<--config> I<--live> +I<--current> Change the memory allocation for a guest domain. If I<--live> is specified, perform a memory balloon of a running guest. If I<--config> is specified, affect the next boot of a persistent guest. -Both flags may be given. If neither flag is given, I<--live> is assumed. +If I<--current> is specified, affect the current guest state. +Both I<--live> and I<--config> flags may be given, but I<--current> is +exclusive. If no flag is specified, behavior is different depending +on hypervisor. Some hypervisors require a larger granularity than kilobytes, and requests that are not an even multiple will be rounded up. For example, vSphere/ESX