[libvirt] [PATCHv2 11/14] qemu: Implement new QMP command for cpu hotplug
Michal Privoznik
mprivozn at redhat.com
Fri Jun 7 14:15:19 UTC 2013
On 05.06.2013 15:44, Peter Krempa wrote:
> This patch implements support for the "cpu-add" QMP command that plugs
> CPUs into a live guest. The "cpu-add" command was introduced in QEMU
> 1.5. For the hotplug to work machine type "pc-i440fx-1.5" is required.
> ---
> src/qemu/qemu_monitor_json.c | 37 +++++++++++++++++++++++++++++++++++--
> 1 file changed, 35 insertions(+), 2 deletions(-)
>
> diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c
> index 4a69fec..a415732 100644
> --- a/src/qemu/qemu_monitor_json.c
> +++ b/src/qemu/qemu_monitor_json.c
> @@ -2089,9 +2089,42 @@ cleanup:
> int qemuMonitorJSONSetCPU(qemuMonitorPtr mon,
> int cpu, bool online)
> {
> - /* XXX Update to use QMP, if QMP ever adds support for cpu hotplug */
> + int ret = -1;
> + virJSONValuePtr cmd = NULL;
> + virJSONValuePtr reply = NULL;
> +
> + if (online) {
> + cmd = qemuMonitorJSONMakeCommand("cpu-add",
> + "i:id", cpu,
> + NULL);
> + } else {
> + /* offlining is not yet implemented in qmp */
> + goto fallback;
> + }
> + if (!cmd)
> + goto cleanup;
> +
> + if ((ret = qemuMonitorJSONCommand(mon, cmd, &reply)) < 0)
> + goto cleanup;
> +
> + if (qemuMonitorJSONHasError(reply, "CommandNotFound"))
> + goto fallback;
> + else
> + ret = qemuMonitorJSONCheckError(cmd, reply);
> +
> + /* this function has non-standard return values, so adapt it */
> + if (ret == 0)
> + ret = 1;
Yeah, this is strange, but it bubbles all the way down to
qemuDomainHotplugVcpus in qemu_driver.c. Not worth refactoring for now.
> +
> +cleanup:
> + virJSONValueFree(cmd);
> + virJSONValueFree(reply);
> + return ret;
> +
> +fallback:
> VIR_DEBUG("no QMP support for cpu_set, trying HMP");
> - return qemuMonitorTextSetCPU(mon, cpu, online);
> + ret = qemuMonitorTextSetCPU(mon, cpu, online);
> + goto cleanup;
> }
>
>
ACK
Michal
More information about the libvir-list
mailing list