提交 40ad7160 编写于 作者: E Eric Blake

blockjob: turn on qemu capability bit for active commit

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: NEric Blake <eblake@redhat.com>
上级 47549d5a
......@@ -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;
}
......
......@@ -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;
......
......@@ -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;
......
......@@ -307,6 +307,14 @@
"id": "libvirt-5"
}
{
"id": "libvirt-6",
"error": {
"class": "GenericError",
"desc": "Parameter 'top' is missing"
}
}
{
"return": [
{
......@@ -382,7 +390,7 @@
"name": "SHUTDOWN"
}
],
"id": "libvirt-6"
"id": "libvirt-7"
}
{
......@@ -871,7 +879,7 @@
"name": "VGA"
}
],
"id": "libvirt-7"
"id": "libvirt-8"
}
{
......@@ -973,7 +981,7 @@
"type": "hex32"
}
],
"id": "libvirt-8"
"id": "libvirt-9"
}
{
......@@ -1111,11 +1119,11 @@
"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"
......@@ -1123,7 +1131,7 @@
}
{
"id": "libvirt-11",
"id": "libvirt-12",
"error": {
"class": "DeviceNotFound",
"desc": "Device 'virtio-net-ccw' not found"
......@@ -1131,7 +1139,7 @@
}
{
"id": "libvirt-12",
"id": "libvirt-13",
"error": {
"class": "DeviceNotFound",
"desc": "Device 'virtio-blk-s390' not found"
......@@ -1139,7 +1147,7 @@
}
{
"id": "libvirt-13",
"id": "libvirt-14",
"error": {
"class": "DeviceNotFound",
"desc": "Device 'virtio-net-s390' not found"
......@@ -1147,7 +1155,7 @@
}
{
"id": "libvirt-14",
"id": "libvirt-15",
"error": {
"class": "DeviceNotFound",
"desc": "Device 'pci-assign' not found"
......@@ -1197,7 +1205,7 @@
"type": "pci-host-devaddr"
}
],
"id": "libvirt-15"
"id": "libvirt-16"
}
{
......@@ -1231,7 +1239,7 @@
"type": "pci-host-devaddr"
}
],
"id": "libvirt-16"
"id": "libvirt-17"
}
{
......@@ -1305,7 +1313,7 @@
"type": "drive"
}
],
"id": "libvirt-17"
"id": "libvirt-18"
}
{
......@@ -1359,7 +1367,7 @@
"type": "drive"
}
],
"id": "libvirt-18"
"id": "libvirt-19"
}
{
......@@ -1401,11 +1409,11 @@
"type": "uint32"
}
],
"id": "libvirt-19"
"id": "libvirt-20"
}
{
"id": "libvirt-20",
"id": "libvirt-21",
"error": {
"class": "DeviceNotFound",
"desc": "Device 'usb-redir' not found"
......@@ -1455,7 +1463,7 @@
"type": "uint32"
}
],
"id": "libvirt-21"
"id": "libvirt-22"
}
{
......@@ -1481,13 +1489,13 @@
"type": "drive"
}
],
"id": "libvirt-22"
"id": "libvirt-23"
}
{
"return": [
],
"id": "libvirt-23"
"id": "libvirt-24"
}
{
......@@ -1497,7 +1505,7 @@
"type": "uint64"
}
],
"id": "libvirt-24"
"id": "libvirt-25"
}
{
......@@ -1547,7 +1555,7 @@
"type": "drive"
}
],
"id": "libvirt-25"
"id": "libvirt-26"
}
{
......@@ -1561,7 +1569,7 @@
"type": "hex32"
}
],
"id": "libvirt-26"
"id": "libvirt-27"
}
{
......@@ -1615,7 +1623,7 @@
"name": "none"
}
],
"id": "libvirt-26"
"id": "libvirt-28"
}
{
......@@ -1693,7 +1701,7 @@
"name": "Opteron_G5"
}
],
"id": "libvirt-27"
"id": "libvirt-29"
}
{
......@@ -1701,11 +1709,11 @@
"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"
......@@ -1713,7 +1721,7 @@
}
{
"id": "libvirt-30",
"id": "libvirt-32",
"error": {
"class": "CommandNotFound",
"desc": "The command query-tpm-types has not been found"
......@@ -1721,7 +1729,7 @@
}
{
"id": "libvirt-31",
"id": "libvirt-33",
"error": {
"class": "CommandNotFound",
"desc": "The command query-command-line-options has not been found"
......
......@@ -319,6 +319,14 @@
"id": "libvirt-5"
}
{
"id": "libvirt-6",
"error": {
"class": "GenericError",
"desc": "Parameter 'top' is missing"
}
}
{
"return": [
{
......@@ -394,7 +402,7 @@
"name": "SHUTDOWN"
}
],
"id": "libvirt-6"
"id": "libvirt-7"
}
{
......@@ -910,7 +918,7 @@
"name": "VGA"
}
],
"id": "libvirt-7"
"id": "libvirt-8"
}
{
......@@ -1012,7 +1020,7 @@
"type": "hex32"
}
],
"id": "libvirt-8"
"id": "libvirt-9"
}
{
......@@ -1158,11 +1166,11 @@
"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"
......@@ -1170,7 +1178,7 @@
}
{
"id": "libvirt-11",
"id": "libvirt-12",
"error": {
"class": "DeviceNotFound",
"desc": "Device 'virtio-net-ccw' not found"
......@@ -1178,7 +1186,7 @@
}
{
"id": "libvirt-12",
"id": "libvirt-13",
"error": {
"class": "DeviceNotFound",
"desc": "Device 'virtio-blk-s390' not found"
......@@ -1186,7 +1194,7 @@
}
{
"id": "libvirt-13",
"id": "libvirt-14",
"error": {
"class": "DeviceNotFound",
"desc": "Device 'virtio-net-s390' not found"
......@@ -1194,7 +1202,7 @@
}
{
"id": "libvirt-14",
"id": "libvirt-15",
"error": {
"class": "DeviceNotFound",
"desc": "Device 'pci-assign' not found"
......@@ -1244,7 +1252,7 @@
"type": "pci-host-devaddr"
}
],
"id": "libvirt-15"
"id": "libvirt-16"
}
{
......@@ -1278,7 +1286,7 @@
"type": "pci-host-devaddr"
}
],
"id": "libvirt-16"
"id": "libvirt-17"
}
{
......@@ -1352,7 +1360,7 @@
"type": "drive"
}
],
"id": "libvirt-17"
"id": "libvirt-18"
}
{
......@@ -1406,7 +1414,7 @@
"type": "drive"
}
],
"id": "libvirt-18"
"id": "libvirt-19"
}
{
......@@ -1448,11 +1456,11 @@
"type": "uint32"
}
],
"id": "libvirt-19"
"id": "libvirt-20"
}
{
"id": "libvirt-20",
"id": "libvirt-21",
"error": {
"class": "DeviceNotFound",
"desc": "Device 'usb-redir' not found"
......@@ -1502,7 +1510,7 @@
"type": "uint32"
}
],
"id": "libvirt-21"
"id": "libvirt-22"
}
{
......@@ -1528,13 +1536,13 @@
"type": "drive"
}
],
"id": "libvirt-22"
"id": "libvirt-23"
}
{
"return": [
],
"id": "libvirt-23"
"id": "libvirt-24"
}
{
......@@ -1544,7 +1552,7 @@
"type": "uint64"
}
],
"id": "libvirt-24"
"id": "libvirt-25"
}
{
......@@ -1594,7 +1602,7 @@
"type": "drive"
}
],
"id": "libvirt-25"
"id": "libvirt-26"
}
{
......@@ -1608,7 +1616,7 @@
"type": "hex32"
}
],
"id": "libvirt-26"
"id": "libvirt-27"
}
{
......@@ -1665,7 +1673,7 @@
"name": "none"
}
],
"id": "libvirt-26"
"id": "libvirt-28"
}
{
......@@ -1743,7 +1751,7 @@
"name": "qemu64"
}
],
"id": "libvirt-27"
"id": "libvirt-29"
}
{
......@@ -1751,11 +1759,11 @@
"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"
......@@ -1763,7 +1771,7 @@
}
{
"id": "libvirt-30",
"id": "libvirt-32",
"error": {
"class": "CommandNotFound",
"desc": "The command query-tpm-types has not been found"
......@@ -1771,7 +1779,7 @@
}
{
"id": "libvirt-31",
"id": "libvirt-33",
"error": {
"class": "CommandNotFound",
"desc": "The command query-command-line-options has not been found"
......
......@@ -334,6 +334,14 @@
"id": "libvirt-5"
}
{
"id": "libvirt-6",
"error": {
"class": "GenericError",
"desc": "Parameter 'top' is missing"
}
}
{
"return": [
{
......@@ -415,7 +423,7 @@
"name": "SHUTDOWN"
}
],
"id": "libvirt-6"
"id": "libvirt-7"
}
{
......@@ -976,7 +984,7 @@
"name": "VGA"
}
],
"id": "libvirt-7"
"id": "libvirt-8"
}
{
......@@ -1078,7 +1086,7 @@
"type": "hex32"
}
],
"id": "libvirt-8"
"id": "libvirt-9"
}
{
......@@ -1224,11 +1232,11 @@
"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"
......@@ -1236,7 +1244,7 @@
}
{
"id": "libvirt-11",
"id": "libvirt-12",
"error": {
"class": "DeviceNotFound",
"desc": "Device 'virtio-net-ccw' not found"
......@@ -1244,7 +1252,7 @@
}
{
"id": "libvirt-12",
"id": "libvirt-13",
"error": {
"class": "DeviceNotFound",
"desc": "Device 'virtio-blk-s390' not found"
......@@ -1252,7 +1260,7 @@
}
{
"id": "libvirt-13",
"id": "libvirt-14",
"error": {
"class": "DeviceNotFound",
"desc": "Device 'virtio-net-s390' not found"
......@@ -1260,7 +1268,7 @@
}
{
"id": "libvirt-14",
"id": "libvirt-15",
"error": {
"class": "DeviceNotFound",
"desc": "Device 'pci-assign' not found"
......@@ -1310,7 +1318,7 @@
"type": "pci-host-devaddr"
}
],
"id": "libvirt-15"
"id": "libvirt-16"
}
{
......@@ -1352,7 +1360,7 @@
"type": "pci-host-devaddr"
}
],
"id": "libvirt-16"
"id": "libvirt-17"
}
{
......@@ -1426,7 +1434,7 @@
"type": "drive"
}
],
"id": "libvirt-17"
"id": "libvirt-18"
}
{
......@@ -1480,7 +1488,7 @@
"type": "drive"
}
],
"id": "libvirt-18"
"id": "libvirt-19"
}
{
......@@ -1522,11 +1530,11 @@
"type": "uint32"
}
],
"id": "libvirt-19"
"id": "libvirt-20"
}
{
"id": "libvirt-20",
"id": "libvirt-21",
"error": {
"class": "DeviceNotFound",
"desc": "Device 'usb-redir' not found"
......@@ -1576,7 +1584,7 @@
"type": "uint32"
}
],
"id": "libvirt-21"
"id": "libvirt-22"
}
{
......@@ -1602,13 +1610,13 @@
"type": "drive"
}
],
"id": "libvirt-22"
"id": "libvirt-23"
}
{
"return": [
],
"id": "libvirt-23"
"id": "libvirt-24"
}
{
......@@ -1618,7 +1626,7 @@
"type": "uint64"
}
],
"id": "libvirt-24"
"id": "libvirt-25"
}
{
......@@ -1668,7 +1676,7 @@
"type": "drive"
}
],
"id": "libvirt-25"
"id": "libvirt-26"
}
{
......@@ -1682,7 +1690,7 @@
"type": "hex32"
}
],
"id": "libvirt-26"
"id": "libvirt-27"
}
{
......@@ -1755,7 +1763,7 @@
"cpu-max": 1
}
],
"id": "libvirt-26"
"id": "libvirt-28"
}
{
......@@ -1833,7 +1841,7 @@
"name": "qemu64"
}
],
"id": "libvirt-27"
"id": "libvirt-29"
}
{
......@@ -1841,19 +1849,19 @@
"enabled": false,
"present": true
},
"id": "libvirt-28"
"id": "libvirt-30"
}
{
"return": [
],
"id": "libvirt-29"
"id": "libvirt-31"
}
{
"return": [
],
"id": "libvirt-30"
"id": "libvirt-32"
}
{
......@@ -2529,5 +2537,5 @@
"option": "drive"
}
],
"id": "libvirt-31"
"id": "libvirt-33"
}
......@@ -340,6 +340,14 @@
"id": "libvirt-5"
}
{
"id": "libvirt-6",
"error": {
"class": "GenericError",
"desc": "Parameter 'top' is missing"
}
}
{
"return": [
{
......@@ -424,7 +432,7 @@
"name": "SHUTDOWN"
}
],
"id": "libvirt-6"
"id": "libvirt-7"
}
{
......@@ -1018,7 +1026,7 @@
"name": "VGA"
}
],
"id": "libvirt-7"
"id": "libvirt-8"
}
{
......@@ -1120,7 +1128,7 @@
"type": "hex32"
}
],
"id": "libvirt-8"
"id": "libvirt-9"
}
{
......@@ -1274,11 +1282,11 @@
"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"
......@@ -1286,7 +1294,7 @@
}
{
"id": "libvirt-11",
"id": "libvirt-12",
"error": {
"class": "DeviceNotFound",
"desc": "Device 'virtio-net-ccw' not found"
......@@ -1294,7 +1302,7 @@
}
{
"id": "libvirt-12",
"id": "libvirt-13",
"error": {
"class": "DeviceNotFound",
"desc": "Device 'virtio-blk-s390' not found"
......@@ -1302,7 +1310,7 @@
}
{
"id": "libvirt-13",
"id": "libvirt-14",
"error": {
"class": "DeviceNotFound",
"desc": "Device 'virtio-net-s390' not found"
......@@ -1310,7 +1318,7 @@
}
{
"id": "libvirt-14",
"id": "libvirt-15",
"error": {
"class": "DeviceNotFound",
"desc": "Device 'pci-assign' not found"
......@@ -1360,7 +1368,7 @@
"type": "pci-host-devaddr"
}
],
"id": "libvirt-15"
"id": "libvirt-16"
}
{
......@@ -1402,7 +1410,7 @@
"type": "pci-host-devaddr"
}
],
"id": "libvirt-16"
"id": "libvirt-17"
}
{
......@@ -1476,7 +1484,7 @@
"type": "drive"
}
],
"id": "libvirt-17"
"id": "libvirt-18"
}
{
......@@ -1530,7 +1538,7 @@
"type": "drive"
}
],
"id": "libvirt-18"
"id": "libvirt-19"
}
{
......@@ -1572,11 +1580,11 @@
"type": "uint32"
}
],
"id": "libvirt-19"
"id": "libvirt-20"
}
{
"id": "libvirt-20",
"id": "libvirt-21",
"error": {
"class": "DeviceNotFound",
"desc": "Device 'usb-redir' not found"
......@@ -1630,7 +1638,7 @@
"type": "uint32"
}
],
"id": "libvirt-21"
"id": "libvirt-22"
}
{
......@@ -1656,7 +1664,7 @@
"type": "drive"
}
],
"id": "libvirt-22"
"id": "libvirt-23"
}
{
......@@ -1666,7 +1674,7 @@
"type": "size"
}
],
"id": "libvirt-23"
"id": "libvirt-24"
}
{
......@@ -1680,7 +1688,7 @@
"type": "uint64"
}
],
"id": "libvirt-24"
"id": "libvirt-25"
}
{
......@@ -1730,7 +1738,7 @@
"type": "drive"
}
],
"id": "libvirt-25"
"id": "libvirt-26"
}
{
......@@ -1744,7 +1752,7 @@
"type": "hex32"
}
],
"id": "libvirt-26"
"id": "libvirt-27"
}
{
......@@ -1833,7 +1841,7 @@
"cpu-max": 1
}
],
"id": "libvirt-26"
"id": "libvirt-28"
}
{
......@@ -1911,7 +1919,7 @@
"name": "qemu64"
}
],
"id": "libvirt-27"
"id": "libvirt-29"
}
{
......@@ -1919,19 +1927,19 @@
"enabled": false,
"present": true
},
"id": "libvirt-28"
"id": "libvirt-30"
}
{
"return": [
],
"id": "libvirt-29"
"id": "libvirt-31"
}
{
"return": [
],
"id": "libvirt-30"
"id": "libvirt-32"
}
{
......@@ -2509,5 +2517,5 @@
"option": "drive"
}
],
"id": "libvirt-31"
"id": "libvirt-33"
}
......@@ -346,6 +346,14 @@
"id": "libvirt-5"
}
{
"id": "libvirt-6",
"error": {
"class": "GenericError",
"desc": "Parameter 'top' is missing"
}
}
{
"return": [
{
......@@ -433,7 +441,7 @@
"name": "SHUTDOWN"
}
],
"id": "libvirt-6"
"id": "libvirt-7"
}
{
......@@ -1024,7 +1032,7 @@
"name": "VGA"
}
],
"id": "libvirt-7"
"id": "libvirt-8"
}
{
......@@ -1126,7 +1134,7 @@
"type": "hex32"
}
],
"id": "libvirt-8"
"id": "libvirt-9"
}
{
......@@ -1280,11 +1288,11 @@
"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"
......@@ -1292,7 +1300,7 @@
}
{
"id": "libvirt-11",
"id": "libvirt-12",
"error": {
"class": "DeviceNotFound",
"desc": "Device 'virtio-net-ccw' not found"
......@@ -1300,7 +1308,7 @@
}
{
"id": "libvirt-12",
"id": "libvirt-13",
"error": {
"class": "DeviceNotFound",
"desc": "Device 'virtio-blk-s390' not found"
......@@ -1308,7 +1316,7 @@
}
{
"id": "libvirt-13",
"id": "libvirt-14",
"error": {
"class": "DeviceNotFound",
"desc": "Device 'virtio-net-s390' not found"
......@@ -1316,7 +1324,7 @@
}
{
"id": "libvirt-14",
"id": "libvirt-15",
"error": {
"class": "DeviceNotFound",
"desc": "Device 'pci-assign' not found"
......@@ -1366,7 +1374,7 @@
"type": "pci-host-devaddr"
}
],
"id": "libvirt-15"
"id": "libvirt-16"
}
{
......@@ -1408,7 +1416,7 @@
"type": "pci-host-devaddr"
}
],
"id": "libvirt-16"
"id": "libvirt-17"
}
{
......@@ -1482,7 +1490,7 @@
"type": "drive"
}
],
"id": "libvirt-17"
"id": "libvirt-18"
}
{
......@@ -1536,7 +1544,7 @@
"type": "drive"
}
],
"id": "libvirt-18"
"id": "libvirt-19"
}
{
......@@ -1578,11 +1586,11 @@
"type": "uint32"
}
],
"id": "libvirt-19"
"id": "libvirt-20"
}
{
"id": "libvirt-20",
"id": "libvirt-21",
"error": {
"class": "DeviceNotFound",
"desc": "Device 'usb-redir' not found"
......@@ -1590,7 +1598,7 @@
}
{
"id": "libvirt-21",
"id": "libvirt-22",
"error": {
"class": "DeviceNotFound",
"desc": "Device 'usb-host' not found"
......@@ -1620,7 +1628,7 @@
"type": "drive"
}
],
"id": "libvirt-22"
"id": "libvirt-23"
}
{
......@@ -1630,7 +1638,7 @@
"type": "size"
}
],
"id": "libvirt-23"
"id": "libvirt-24"
}
{
......@@ -1644,7 +1652,7 @@
"type": "uint64"
}
],
"id": "libvirt-24"
"id": "libvirt-25"
}
{
......@@ -1694,7 +1702,7 @@
"type": "drive"
}
],
"id": "libvirt-25"
"id": "libvirt-26"
}
{
......@@ -1708,7 +1716,7 @@
"type": "hex32"
}
],
"id": "libvirt-26"
"id": "libvirt-27"
}
{
......@@ -1805,7 +1813,7 @@
"cpu-max": 1
}
],
"id": "libvirt-26"
"id": "libvirt-28"
}
{
......@@ -1883,7 +1891,7 @@
"name": "qemu64"
}
],
"id": "libvirt-27"
"id": "libvirt-29"
}
{
......@@ -1891,19 +1899,19 @@
"enabled": false,
"present": true
},
"id": "libvirt-28"
"id": "libvirt-30"
}
{
"return": [
],
"id": "libvirt-29"
"id": "libvirt-31"
}
{
"return": [
],
"id": "libvirt-30"
"id": "libvirt-32"
}
{
......@@ -2486,5 +2494,5 @@
"option": "drive"
}
],
"id": "libvirt-31"
"id": "libvirt-33"
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册