From 6cdff51fb3043043320d89ec38cf088f8eba1ca2 Mon Sep 17 00:00:00 2001 From: Peter Krempa Date: Mon, 27 May 2013 16:08:30 +0200 Subject: [PATCH] qemu: Implement new QMP command for cpu hotplug 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. (cherry picked from commit c12b2be5169298708cf727ed9ccd42e9d89a9737) --- 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 6fdd650d88..7f3e0a6012 100644 --- a/src/qemu/qemu_monitor_json.c +++ b/src/qemu/qemu_monitor_json.c @@ -2086,9 +2086,42 @@ cleanup: int qemuMonitorJSONSetCPU(qemuMonitorPtr mon, int cpu, int 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; + +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; }