]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemu: Introduce qemuMonitorSetMigrationCapabilities
authorJiri Denemark <jdenemar@redhat.com>
Thu, 1 Mar 2018 08:26:07 +0000 (09:26 +0100)
committerJiri Denemark <jdenemar@redhat.com>
Tue, 17 Apr 2018 08:46:23 +0000 (10:46 +0200)
Our current monitor API forces the caller to call
migrate-set-capabilities QMP command for each capability separately,
which is quite suboptimal. Let's add a new API for setting all
capabilities at once.

Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
src/qemu/qemu_monitor.c
src/qemu/qemu_monitor.h
src/qemu/qemu_monitor_json.c
src/qemu/qemu_monitor_json.h

index 22f05222db9089eace803a5fe8a9d86c7c643442..44da4d56427bcf56e75f1b374b944224be75cc1f 100644 (file)
@@ -3960,6 +3960,25 @@ qemuMonitorSetMigrationCapability(qemuMonitorPtr mon,
 }
 
 
+int
+qemuMonitorSetMigrationCapabilities(qemuMonitorPtr mon,
+                                    virBitmapPtr caps,
+                                    virBitmapPtr states)
+{
+    char *capsStr = virBitmapFormat(caps);
+    char *statesStr = virBitmapFormat(states);
+
+    VIR_DEBUG("caps=%s, states=%s", NULLSTR(capsStr), NULLSTR(statesStr));
+
+    VIR_FREE(capsStr);
+    VIR_FREE(statesStr);
+
+    QEMU_CHECK_MONITOR_JSON(mon);
+
+    return qemuMonitorJSONSetMigrationCapabilities(mon, caps, states);
+}
+
+
 /**
  * qemuMonitorGetGICCapabilities:
  * @mon: QEMU monitor
index 9556a513415e99bcebffb044c3533210ae9da899..0fdcada5c53ad6ca86c8529853ec197e878983a7 100644 (file)
@@ -763,6 +763,9 @@ int qemuMonitorGetMigrationCapabilities(qemuMonitorPtr mon,
 int qemuMonitorSetMigrationCapability(qemuMonitorPtr mon,
                                       qemuMonitorMigrationCaps capability,
                                       bool state);
+int qemuMonitorSetMigrationCapabilities(qemuMonitorPtr mon,
+                                        virBitmapPtr caps,
+                                        virBitmapPtr states);
 
 int qemuMonitorGetGICCapabilities(qemuMonitorPtr mon,
                                   virGICCapability **capabilities);
index 57c2c4de0f88d41274108c0cf7b0055362653550..7ab73657a0bea3f97ee530a8844577194bc8f77c 100644 (file)
@@ -6251,6 +6251,69 @@ qemuMonitorJSONSetMigrationCapability(qemuMonitorPtr mon,
 }
 
 
+int
+qemuMonitorJSONSetMigrationCapabilities(qemuMonitorPtr mon,
+                                        virBitmapPtr caps,
+                                        virBitmapPtr states)
+{
+    int ret = -1;
+    qemuMonitorMigrationCaps bit;
+    virJSONValuePtr cmd = NULL;
+    virJSONValuePtr reply = NULL;
+    virJSONValuePtr cap = NULL;
+    virJSONValuePtr array;
+
+    if (!(array = virJSONValueNewArray()))
+        goto cleanup;
+
+    for (bit = 0; bit < QEMU_MONITOR_MIGRATION_CAPS_LAST; bit++) {
+        bool supported = false;
+        bool state = false;
+
+        ignore_value(virBitmapGetBit(caps, bit, &supported));
+        if (!supported)
+            continue;
+
+        ignore_value(virBitmapGetBit(states, bit, &state));
+
+        if (!(cap = virJSONValueNewObject()))
+            goto cleanup;
+
+        if (virJSONValueObjectAppendString(cap, "capability",
+                                           qemuMonitorMigrationCapsTypeToString(bit)) < 0)
+            goto cleanup;
+
+        if (virJSONValueObjectAppendBoolean(cap, "state", state) < 0)
+            goto cleanup;
+
+        if (virJSONValueArrayAppend(array, cap) < 0)
+            goto cleanup;
+
+        cap = NULL;
+    }
+
+    cmd = qemuMonitorJSONMakeCommand("migrate-set-capabilities",
+                                     "a:capabilities", &array,
+                                     NULL);
+    if (!cmd)
+        goto cleanup;
+
+    if (qemuMonitorJSONCommand(mon, cmd, &reply) < 0)
+        goto cleanup;
+
+    if (qemuMonitorJSONCheckError(cmd, reply) < 0)
+        goto cleanup;
+
+    ret = 0;
+ cleanup:
+    virJSONValueFree(array);
+    virJSONValueFree(cap);
+    virJSONValueFree(cmd);
+    virJSONValueFree(reply);
+    return ret;
+}
+
+
 /**
  * qemuMonitorJSONGetGICCapabilities:
  * @mon: QEMU JSON monitor
index 045df4919f0ae88127d1e1c5c518fddb32df724e..76e6738f4403a84e51b5a056fbd53638b60de0eb 100644 (file)
@@ -148,6 +148,9 @@ int qemuMonitorJSONGetMigrationCapabilities(qemuMonitorPtr mon,
 int qemuMonitorJSONSetMigrationCapability(qemuMonitorPtr mon,
                                           qemuMonitorMigrationCaps capability,
                                           bool state);
+int qemuMonitorJSONSetMigrationCapabilities(qemuMonitorPtr mon,
+                                            virBitmapPtr caps,
+                                            virBitmapPtr states);
 
 int qemuMonitorJSONGetGICCapabilities(qemuMonitorPtr mon,
                                       virGICCapability **capabilities);