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; + +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; } -- 1.8.2.1 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list