]> xenbits.xensource.com Git - people/liuw/libxenctrl-split/libvirt.git/commitdiff
blockjob: turn on qemu capability bit for active commit
authorEric Blake <eblake@redhat.com>
Tue, 17 Jun 2014 03:42:49 +0000 (21:42 -0600)
committerEric Blake <eblake@redhat.com>
Thu, 3 Jul 2014 20:19:53 +0000 (14:19 -0600)
Use the probing functionality added in the last patch to turn on
a capability bit when active commit is present, and gate active
commit on that capability.

For my own reference: the difference between BLOCKJOB_SYNC and
BLOCKJOB_ASYNC is whether qemu generated an event at the
conclusion of blockpull; basically, RHEL 6.2 was the only release
of qemu that has the sync semantics and lacks the event.  RHEL
6.3 added blockcopy, but also picked up on the upstream style
of qemu generating events.  As no one is likely to backport
active commit to RHEL 6.2, it's safe for blockcommit to always
require async blockjob support.

Modifying qemucapabilitiestest is painful; the .replies files would
be so much easier if they had comments correlating which command
generated the given reply.  Maybe I'll fix that up later...

* src/qemu/qemu_capabilities.h (QEMU_CAPS_ACTIVE_COMMIT): New
capability.
* src/qemu/qemu_driver.c (qemuDomainBlockCommit): Use the new bit
* src/qemu/qemu_capabilities.c (virQEMUCaps): Name the new bit.
(virQEMUCapsProbeQMPCommands): Set it.
* tests/qemucapabilitiesdata/caps_1.3.1-1.replies: Update.
* tests/qemucapabilitiesdata/caps_1.4.2-1.replies: Likewise.
* tests/qemucapabilitiesdata/caps_1.5.3-1.replies: Likewise.
* tests/qemucapabilitiesdata/caps_1.6.0-1.replies: Likewise.
* tests/qemucapabilitiesdata/caps_1.6.50-1.replies: Likewise.

Signed-off-by: Eric Blake <eblake@redhat.com>
src/qemu/qemu_capabilities.c
src/qemu/qemu_capabilities.h
src/qemu/qemu_driver.c
tests/qemucapabilitiesdata/caps_1.3.1-1.replies
tests/qemucapabilitiesdata/caps_1.4.2-1.replies
tests/qemucapabilitiesdata/caps_1.5.3-1.replies
tests/qemucapabilitiesdata/caps_1.6.0-1.replies
tests/qemucapabilitiesdata/caps_1.6.50-1.replies

index 934a7b02b6e59b121666369441c510ffae9cc261..40ebf2947c491742ef5e1812ecf4ff94dc0c2b6d 100644 (file)
@@ -257,6 +257,7 @@ VIR_ENUM_IMPL(virQEMUCaps, QEMU_CAPS_LAST,
               "usb-kbd", /* 165 */
               "host-pci-multidomain",
               "msg-timestamp",
+              "active-commit",
     );
 
 
@@ -2181,6 +2182,12 @@ virQEMUCapsProbeQMPCommands(virQEMUCapsPtr qemuCaps,
         VIR_FORCE_CLOSE(fd);
     }
 
+    /* Probe for active commit of qemu 2.1 (for now, we are choosing
+     * to ignore the fact that qemu 2.0 can also do active commit) */
+    if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_BLOCK_COMMIT) &&
+        qemuMonitorSupportsActiveCommit(mon))
+        virQEMUCapsSet(qemuCaps, QEMU_CAPS_ACTIVE_COMMIT);
+
     return 0;
 }
 
index 17be405b1c1d89fa52fe87738709df294eb321a7..0ea8de8f3851720d7b0f08c6b90091bf61d34244 100644 (file)
@@ -207,6 +207,7 @@ typedef enum {
     QEMU_CAPS_DEVICE_USB_KBD     = 165, /* -device usb-kbd */
     QEMU_CAPS_HOST_PCI_MULTIDOMAIN = 166, /* support domain > 0 in host pci address */
     QEMU_CAPS_MSG_TIMESTAMP      = 167, /* -msg timestamp */
+    QEMU_CAPS_ACTIVE_COMMIT      = 168, /* block-commit works without 'top' */
 
     QEMU_CAPS_LAST,                   /* this must always be the last item */
 } virQEMUCapsFlags;
index 1983cef541b0247c581b38adbb9656d5eedee4a2..112a9bf0cc2888cd23c1d191cd04a2c94113a603 100644 (file)
@@ -15498,7 +15498,10 @@ qemuDomainBlockCommit(virDomainPtr dom,
                        "%s", _("domain is not running"));
         goto endjob;
     }
-    if (!virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_BLOCK_COMMIT)) {
+    /* Ensure that no one backports commit to RHEL 6.2, where cancel
+     * behaved differently */
+    if (!(virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_BLOCK_COMMIT) &&
+          virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_BLOCKJOB_ASYNC))) {
         virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
                        _("online commit not supported with this QEMU binary"));
         goto endjob;
@@ -15530,10 +15533,7 @@ qemuDomainBlockCommit(virDomainPtr dom,
      * process; qemu 2.1 is further improving active commit. We need
      * to start supporting it in libvirt. */
     if (topSource == disk->src) {
-        /* We assume that no one will backport qemu 2.0 active commit
-         * to an earlier qemu without also backporting the block job
-         * ready event; but this makes sure of that fact */
-        if (!virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_BLOCKJOB_ASYNC)) {
+        if (!virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_ACTIVE_COMMIT)) {
             virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
                            _("active commit not supported with this QEMU binary"));
             goto endjob;
index 63c18da88f375fde5ad0ed0de468cd520897c9b0..04d21410b35a94d342eefc516f2146af0f43b9a2 100644 (file)
     "id": "libvirt-5"
 }
 
+{
+    "id": "libvirt-6",
+    "error": {
+        "class": "GenericError",
+        "desc": "Parameter 'top' is missing"
+    }
+}
+
 {
     "return": [
         {
             "name": "SHUTDOWN"
         }
     ],
-    "id": "libvirt-6"
+    "id": "libvirt-7"
 }
 
 {
             "name": "VGA"
         }
     ],
-    "id": "libvirt-7"
+    "id": "libvirt-8"
 }
 
 {
             "type": "hex32"
         }
     ],
-    "id": "libvirt-8"
+    "id": "libvirt-9"
 }
 
 {
             "type": "on/off"
         }
     ],
-    "id": "libvirt-9"
+    "id": "libvirt-10"
 }
 
 {
-    "id": "libvirt-10",
+    "id": "libvirt-11",
     "error": {
         "class": "DeviceNotFound",
         "desc": "Device 'virtio-blk-ccw' not found"
 }
 
 {
-    "id": "libvirt-11",
+    "id": "libvirt-12",
     "error": {
         "class": "DeviceNotFound",
         "desc": "Device 'virtio-net-ccw' not found"
 }
 
 {
-    "id": "libvirt-12",
+    "id": "libvirt-13",
     "error": {
         "class": "DeviceNotFound",
         "desc": "Device 'virtio-blk-s390' not found"
 }
 
 {
-    "id": "libvirt-13",
+    "id": "libvirt-14",
     "error": {
         "class": "DeviceNotFound",
         "desc": "Device 'virtio-net-s390' not found"
 }
 
 {
-    "id": "libvirt-14",
+    "id": "libvirt-15",
     "error": {
         "class": "DeviceNotFound",
         "desc": "Device 'pci-assign' not found"
             "type": "pci-host-devaddr"
         }
     ],
-    "id": "libvirt-15"
+    "id": "libvirt-16"
 }
 
 {
             "type": "pci-host-devaddr"
         }
     ],
-    "id": "libvirt-16"
+    "id": "libvirt-17"
 }
 
 {
             "type": "drive"
         }
     ],
-    "id": "libvirt-17"
+    "id": "libvirt-18"
 }
 
 {
             "type": "drive"
         }
     ],
-    "id": "libvirt-18"
+    "id": "libvirt-19"
 }
 
 {
             "type": "uint32"
         }
     ],
-    "id": "libvirt-19"
+    "id": "libvirt-20"
 }
 
 {
-    "id": "libvirt-20",
+    "id": "libvirt-21",
     "error": {
         "class": "DeviceNotFound",
         "desc": "Device 'usb-redir' not found"
             "type": "uint32"
         }
     ],
-    "id": "libvirt-21"
+    "id": "libvirt-22"
 }
 
 {
             "type": "drive"
         }
     ],
-    "id": "libvirt-22"
+    "id": "libvirt-23"
 }
 
 {
     "return": [
     ],
-    "id": "libvirt-23"
+    "id": "libvirt-24"
 }
 
 {
             "type": "uint64"
         }
     ],
-    "id": "libvirt-24"
+    "id": "libvirt-25"
 }
 
 {
             "type": "drive"
         }
     ],
-    "id": "libvirt-25"
+    "id": "libvirt-26"
 }
 
 {
             "type": "hex32"
         }
     ],
-    "id": "libvirt-26"
+    "id": "libvirt-27"
 }
 
 {
             "name": "none"
         }
     ],
-    "id": "libvirt-26"
+    "id": "libvirt-28"
 }
 
 {
             "name": "Opteron_G5"
         }
     ],
-    "id": "libvirt-27"
+    "id": "libvirt-29"
 }
 
 {
         "enabled": false,
         "present": true
     },
-    "id": "libvirt-28"
+    "id": "libvirt-30"
 }
 
 {
-    "id": "libvirt-29",
+    "id": "libvirt-31",
     "error": {
         "class": "CommandNotFound",
         "desc": "The command query-tpm-models has not been found"
 }
 
 {
-    "id": "libvirt-30",
+    "id": "libvirt-32",
     "error": {
         "class": "CommandNotFound",
         "desc": "The command query-tpm-types has not been found"
 }
 
 {
-    "id": "libvirt-31",
+    "id": "libvirt-33",
     "error": {
         "class": "CommandNotFound",
         "desc": "The command query-command-line-options has not been found"
index 4fb40617566eb1a6137f8b0ebea332bbfd547376..aef359c0f12f9369af01d47bafae134d8656b543 100644 (file)
     "id": "libvirt-5"
 }
 
+{
+    "id": "libvirt-6",
+    "error": {
+        "class": "GenericError",
+        "desc": "Parameter 'top' is missing"
+    }
+}
+
 {
     "return": [
         {
             "name": "SHUTDOWN"
         }
     ],
-    "id": "libvirt-6"
+    "id": "libvirt-7"
 }
 
 {
             "name": "VGA"
         }
     ],
-    "id": "libvirt-7"
+    "id": "libvirt-8"
 }
 
 {
             "type": "hex32"
         }
     ],
-    "id": "libvirt-8"
+    "id": "libvirt-9"
 }
 
 {
             "type": "on/off"
         }
     ],
-    "id": "libvirt-9"
+    "id": "libvirt-10"
 }
 
 {
-    "id": "libvirt-10",
+    "id": "libvirt-11",
     "error": {
         "class": "DeviceNotFound",
         "desc": "Device 'virtio-blk-ccw' not found"
 }
 
 {
-    "id": "libvirt-11",
+    "id": "libvirt-12",
     "error": {
         "class": "DeviceNotFound",
         "desc": "Device 'virtio-net-ccw' not found"
 }
 
 {
-    "id": "libvirt-12",
+    "id": "libvirt-13",
     "error": {
         "class": "DeviceNotFound",
         "desc": "Device 'virtio-blk-s390' not found"
 }
 
 {
-    "id": "libvirt-13",
+    "id": "libvirt-14",
     "error": {
         "class": "DeviceNotFound",
         "desc": "Device 'virtio-net-s390' not found"
 }
 
 {
-    "id": "libvirt-14",
+    "id": "libvirt-15",
     "error": {
         "class": "DeviceNotFound",
         "desc": "Device 'pci-assign' not found"
             "type": "pci-host-devaddr"
         }
     ],
-    "id": "libvirt-15"
+    "id": "libvirt-16"
 }
 
 {
             "type": "pci-host-devaddr"
         }
     ],
-    "id": "libvirt-16"
+    "id": "libvirt-17"
 }
 
 {
             "type": "drive"
         }
     ],
-    "id": "libvirt-17"
+    "id": "libvirt-18"
 }
 
 {
             "type": "drive"
         }
     ],
-    "id": "libvirt-18"
+    "id": "libvirt-19"
 }
 
 {
             "type": "uint32"
         }
     ],
-    "id": "libvirt-19"
+    "id": "libvirt-20"
 }
 
 {
-    "id": "libvirt-20",
+    "id": "libvirt-21",
     "error": {
         "class": "DeviceNotFound",
         "desc": "Device 'usb-redir' not found"
             "type": "uint32"
         }
     ],
-    "id": "libvirt-21"
+    "id": "libvirt-22"
 }
 
 {
             "type": "drive"
         }
     ],
-    "id": "libvirt-22"
+    "id": "libvirt-23"
 }
 
 {
     "return": [
     ],
-    "id": "libvirt-23"
+    "id": "libvirt-24"
 }
 
 {
             "type": "uint64"
         }
     ],
-    "id": "libvirt-24"
+    "id": "libvirt-25"
 }
 
 {
             "type": "drive"
         }
     ],
-    "id": "libvirt-25"
+    "id": "libvirt-26"
 }
 
 {
             "type": "hex32"
         }
     ],
-    "id": "libvirt-26"
+    "id": "libvirt-27"
 }
 
 {
             "name": "none"
         }
     ],
-    "id": "libvirt-26"
+    "id": "libvirt-28"
 }
 
 {
             "name": "qemu64"
         }
     ],
-    "id": "libvirt-27"
+    "id": "libvirt-29"
 }
 
 {
         "enabled": false,
         "present": true
     },
-    "id": "libvirt-28"
+    "id": "libvirt-30"
 }
 
 {
-    "id": "libvirt-29",
+    "id": "libvirt-31",
     "error": {
         "class": "CommandNotFound",
         "desc": "The command query-tpm-models has not been found"
 }
 
 {
-    "id": "libvirt-30",
+    "id": "libvirt-32",
     "error": {
         "class": "CommandNotFound",
         "desc": "The command query-tpm-types has not been found"
 }
 
 {
-    "id": "libvirt-31",
+    "id": "libvirt-33",
     "error": {
         "class": "CommandNotFound",
         "desc": "The command query-command-line-options has not been found"
index 686fa3ecd47ba5324ab625065282b8825ef2b5fb..1f84bb6556e2e4e63d8d9e3374656d768dd8c242 100644 (file)
     "id": "libvirt-5"
 }
 
+{
+    "id": "libvirt-6",
+    "error": {
+        "class": "GenericError",
+        "desc": "Parameter 'top' is missing"
+    }
+}
+
 {
     "return": [
         {
             "name": "SHUTDOWN"
         }
     ],
-    "id": "libvirt-6"
+    "id": "libvirt-7"
 }
 
 {
             "name": "VGA"
         }
     ],
-    "id": "libvirt-7"
+    "id": "libvirt-8"
 }
 
 {
             "type": "hex32"
         }
     ],
-    "id": "libvirt-8"
+    "id": "libvirt-9"
 }
 
 {
             "type": "on/off"
         }
     ],
-    "id": "libvirt-9"
+    "id": "libvirt-10"
 }
 
 {
-    "id": "libvirt-10",
+    "id": "libvirt-11",
     "error": {
         "class": "DeviceNotFound",
         "desc": "Device 'virtio-blk-ccw' not found"
 }
 
 {
-    "id": "libvirt-11",
+    "id": "libvirt-12",
     "error": {
         "class": "DeviceNotFound",
         "desc": "Device 'virtio-net-ccw' not found"
 }
 
 {
-    "id": "libvirt-12",
+    "id": "libvirt-13",
     "error": {
         "class": "DeviceNotFound",
         "desc": "Device 'virtio-blk-s390' not found"
 }
 
 {
-    "id": "libvirt-13",
+    "id": "libvirt-14",
     "error": {
         "class": "DeviceNotFound",
         "desc": "Device 'virtio-net-s390' not found"
 }
 
 {
-    "id": "libvirt-14",
+    "id": "libvirt-15",
     "error": {
         "class": "DeviceNotFound",
         "desc": "Device 'pci-assign' not found"
             "type": "pci-host-devaddr"
         }
     ],
-    "id": "libvirt-15"
+    "id": "libvirt-16"
 }
 
 {
             "type": "pci-host-devaddr"
         }
     ],
-    "id": "libvirt-16"
+    "id": "libvirt-17"
 }
 
 {
             "type": "drive"
         }
     ],
-    "id": "libvirt-17"
+    "id": "libvirt-18"
 }
 
 {
             "type": "drive"
         }
     ],
-    "id": "libvirt-18"
+    "id": "libvirt-19"
 }
 
 {
             "type": "uint32"
         }
     ],
-    "id": "libvirt-19"
+    "id": "libvirt-20"
 }
 
 {
-    "id": "libvirt-20",
+    "id": "libvirt-21",
     "error": {
         "class": "DeviceNotFound",
         "desc": "Device 'usb-redir' not found"
             "type": "uint32"
         }
     ],
-    "id": "libvirt-21"
+    "id": "libvirt-22"
 }
 
 {
             "type": "drive"
         }
     ],
-    "id": "libvirt-22"
+    "id": "libvirt-23"
 }
 
 {
     "return": [
     ],
-    "id": "libvirt-23"
+    "id": "libvirt-24"
 }
 
 {
             "type": "uint64"
         }
     ],
-    "id": "libvirt-24"
+    "id": "libvirt-25"
 }
 
 {
             "type": "drive"
         }
     ],
-    "id": "libvirt-25"
+    "id": "libvirt-26"
 }
 
 {
             "type": "hex32"
         }
     ],
-    "id": "libvirt-26"
+    "id": "libvirt-27"
 }
 
 {
             "cpu-max": 1
         }
     ],
-    "id": "libvirt-26"
+    "id": "libvirt-28"
 }
 
 {
             "name": "qemu64"
         }
     ],
-    "id": "libvirt-27"
+    "id": "libvirt-29"
 }
 
 {
         "enabled": false,
         "present": true
     },
-    "id": "libvirt-28"
+    "id": "libvirt-30"
 }
 
 {
     "return": [
     ],
-    "id": "libvirt-29"
+    "id": "libvirt-31"
 }
 
 {
     "return": [
     ],
-    "id": "libvirt-30"
+    "id": "libvirt-32"
 }
 
 {
             "option": "drive"
         }
     ],
-    "id": "libvirt-31"
+    "id": "libvirt-33"
 }
index 95e0c37dfdfde6ceaddfe1a823bdc3aee8bd7851..c9dc29b106afbf2e823dbdfa4c1373646f932a57 100644 (file)
     "id": "libvirt-5"
 }
 
+{
+    "id": "libvirt-6",
+    "error": {
+        "class": "GenericError",
+        "desc": "Parameter 'top' is missing"
+    }
+}
+
 {
     "return": [
         {
             "name": "SHUTDOWN"
         }
     ],
-    "id": "libvirt-6"
+    "id": "libvirt-7"
 }
 
 {
             "name": "VGA"
         }
     ],
-    "id": "libvirt-7"
+    "id": "libvirt-8"
 }
 
 {
             "type": "hex32"
         }
     ],
-    "id": "libvirt-8"
+    "id": "libvirt-9"
 }
 
 {
             "type": "on/off"
         }
     ],
-    "id": "libvirt-9"
+    "id": "libvirt-10"
 }
 
 {
-    "id": "libvirt-10",
+    "id": "libvirt-11",
     "error": {
         "class": "DeviceNotFound",
         "desc": "Device 'virtio-blk-ccw' not found"
 }
 
 {
-    "id": "libvirt-11",
+    "id": "libvirt-12",
     "error": {
         "class": "DeviceNotFound",
         "desc": "Device 'virtio-net-ccw' not found"
 }
 
 {
-    "id": "libvirt-12",
+    "id": "libvirt-13",
     "error": {
         "class": "DeviceNotFound",
         "desc": "Device 'virtio-blk-s390' not found"
 }
 
 {
-    "id": "libvirt-13",
+    "id": "libvirt-14",
     "error": {
         "class": "DeviceNotFound",
         "desc": "Device 'virtio-net-s390' not found"
 }
 
 {
-    "id": "libvirt-14",
+    "id": "libvirt-15",
     "error": {
         "class": "DeviceNotFound",
         "desc": "Device 'pci-assign' not found"
             "type": "pci-host-devaddr"
         }
     ],
-    "id": "libvirt-15"
+    "id": "libvirt-16"
 }
 
 {
             "type": "pci-host-devaddr"
         }
     ],
-    "id": "libvirt-16"
+    "id": "libvirt-17"
 }
 
 {
             "type": "drive"
         }
     ],
-    "id": "libvirt-17"
+    "id": "libvirt-18"
 }
 
 {
             "type": "drive"
         }
     ],
-    "id": "libvirt-18"
+    "id": "libvirt-19"
 }
 
 {
             "type": "uint32"
         }
     ],
-    "id": "libvirt-19"
+    "id": "libvirt-20"
 }
 
 {
-    "id": "libvirt-20",
+    "id": "libvirt-21",
     "error": {
         "class": "DeviceNotFound",
         "desc": "Device 'usb-redir' not found"
             "type": "uint32"
         }
     ],
-    "id": "libvirt-21"
+    "id": "libvirt-22"
 }
 
 {
             "type": "drive"
         }
     ],
-    "id": "libvirt-22"
+    "id": "libvirt-23"
 }
 
 {
             "type": "size"
         }
     ],
-    "id": "libvirt-23"
+    "id": "libvirt-24"
 }
 
 {
             "type": "uint64"
         }
     ],
-    "id": "libvirt-24"
+    "id": "libvirt-25"
 }
 
 {
             "type": "drive"
         }
     ],
-    "id": "libvirt-25"
+    "id": "libvirt-26"
 }
 
 {
             "type": "hex32"
         }
     ],
-    "id": "libvirt-26"
+    "id": "libvirt-27"
 }
 
 {
             "cpu-max": 1
         }
     ],
-    "id": "libvirt-26"
+    "id": "libvirt-28"
 }
 
 {
             "name": "qemu64"
         }
     ],
-    "id": "libvirt-27"
+    "id": "libvirt-29"
 }
 
 {
         "enabled": false,
         "present": true
     },
-    "id": "libvirt-28"
+    "id": "libvirt-30"
 }
 
 {
     "return": [
     ],
-    "id": "libvirt-29"
+    "id": "libvirt-31"
 }
 
 {
     "return": [
     ],
-    "id": "libvirt-30"
+    "id": "libvirt-32"
 }
 
 {
             "option": "drive"
         }
     ],
-    "id": "libvirt-31"
+    "id": "libvirt-33"
 }
index 3ecf185942e225df528c4539fa11f23e4f81e288..a60542a333eb9d17950f4b3bdd79759a896617d5 100644 (file)
     "id": "libvirt-5"
 }
 
+{
+    "id": "libvirt-6",
+    "error": {
+        "class": "GenericError",
+        "desc": "Parameter 'top' is missing"
+    }
+}
+
 {
     "return": [
         {
             "name": "SHUTDOWN"
         }
     ],
-    "id": "libvirt-6"
+    "id": "libvirt-7"
 }
 
 {
             "name": "VGA"
         }
     ],
-    "id": "libvirt-7"
+    "id": "libvirt-8"
 }
 
 {
             "type": "hex32"
         }
     ],
-    "id": "libvirt-8"
+    "id": "libvirt-9"
 }
 
 {
             "type": "on/off"
         }
     ],
-    "id": "libvirt-9"
+    "id": "libvirt-10"
 }
 
 {
-    "id": "libvirt-10",
+    "id": "libvirt-11",
     "error": {
         "class": "DeviceNotFound",
         "desc": "Device 'virtio-blk-ccw' not found"
 }
 
 {
-    "id": "libvirt-11",
+    "id": "libvirt-12",
     "error": {
         "class": "DeviceNotFound",
         "desc": "Device 'virtio-net-ccw' not found"
 }
 
 {
-    "id": "libvirt-12",
+    "id": "libvirt-13",
     "error": {
         "class": "DeviceNotFound",
         "desc": "Device 'virtio-blk-s390' not found"
 }
 
 {
-    "id": "libvirt-13",
+    "id": "libvirt-14",
     "error": {
         "class": "DeviceNotFound",
         "desc": "Device 'virtio-net-s390' not found"
 }
 
 {
-    "id": "libvirt-14",
+    "id": "libvirt-15",
     "error": {
         "class": "DeviceNotFound",
         "desc": "Device 'pci-assign' not found"
             "type": "pci-host-devaddr"
         }
     ],
-    "id": "libvirt-15"
+    "id": "libvirt-16"
 }
 
 {
             "type": "pci-host-devaddr"
         }
     ],
-    "id": "libvirt-16"
+    "id": "libvirt-17"
 }
 
 {
             "type": "drive"
         }
     ],
-    "id": "libvirt-17"
+    "id": "libvirt-18"
 }
 
 {
             "type": "drive"
         }
     ],
-    "id": "libvirt-18"
+    "id": "libvirt-19"
 }
 
 {
             "type": "uint32"
         }
     ],
-    "id": "libvirt-19"
+    "id": "libvirt-20"
 }
 
 {
-    "id": "libvirt-20",
+    "id": "libvirt-21",
     "error": {
         "class": "DeviceNotFound",
         "desc": "Device 'usb-redir' not found"
 }
 
 {
-    "id": "libvirt-21",
+    "id": "libvirt-22",
     "error": {
         "class": "DeviceNotFound",
         "desc": "Device 'usb-host' not found"
             "type": "drive"
         }
     ],
-    "id": "libvirt-22"
+    "id": "libvirt-23"
 }
 
 {
             "type": "size"
         }
     ],
-    "id": "libvirt-23"
+    "id": "libvirt-24"
 }
 
 {
             "type": "uint64"
         }
     ],
-    "id": "libvirt-24"
+    "id": "libvirt-25"
 }
 
 {
             "type": "drive"
         }
     ],
-    "id": "libvirt-25"
+    "id": "libvirt-26"
 }
 
 {
             "type": "hex32"
         }
     ],
-    "id": "libvirt-26"
+    "id": "libvirt-27"
 }
 
 {
             "cpu-max": 1
         }
     ],
-    "id": "libvirt-26"
+    "id": "libvirt-28"
 }
 
 {
             "name": "qemu64"
         }
     ],
-    "id": "libvirt-27"
+    "id": "libvirt-29"
 }
 
 {
         "enabled": false,
         "present": true
     },
-    "id": "libvirt-28"
+    "id": "libvirt-30"
 }
 
 {
     "return": [
     ],
-    "id": "libvirt-29"
+    "id": "libvirt-31"
 }
 
 {
     "return": [
     ],
-    "id": "libvirt-30"
+    "id": "libvirt-32"
 }
 
 {
             "option": "drive"
         }
     ],
-    "id": "libvirt-31"
+    "id": "libvirt-33"
 }