]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemu: Implement new QMP command for cpu hotplug
authorPeter Krempa <pkrempa@redhat.com>
Mon, 27 May 2013 14:08:30 +0000 (16:08 +0200)
committerPeter Krempa <pkrempa@redhat.com>
Fri, 7 Jun 2013 14:19:20 +0000 (16:19 +0200)
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

index 02a4c51e853715861f8f464d88aa57d284acf0bf..88a0dc9dfbfd362aef0eef4721b5d019dae5f610 100644 (file)
@@ -2078,9 +2078,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;
 }