[PATCH v2 00/12] qemu: Prepare for QAPIfied object-add

QEMU plans to QAPIfy object add. This series prepares for the API change (drop of 'props' wrapper for the object) and adds testing based on our qemuxml2argv test data which forces the output to JSON and validates it agains the schema. Based on Kevin's qemu patches: https://listman.redhat.com/archives/libvir-list/2021-February/msg01168.html Last patch forces more files to be processed and as the summary suggest will not be pushed. The patch updating qemucapabilitiesdata will be updated after Kevin's patches hit upstream repo. Peter Krempa (12): qemu: command: Generate commandline of 'masterKey0' secret via JSON qemu: command: Generate commandline of 'sev0' sev-guest object via JSON qemu: command: Generate commandline of iothread objects JSON qemu: capabilities: Introduce QEMU_CAPS_OBJECT_QAPIFIED tests: qemuxml2argv: Validate generation of JSON props for object-add qemu: command: Introduce raw JSON passthrough for '-object' for testing qemu: monitor: Make wrapping of 'props' of 'object-add' optional qemuMonitorCreateObjectPropsWrap: Open-code in qemuBuildMemoryBackendProps qemu: monitor: Don't add 'props' wrapper if qemu has QEMU_CAPS_OBJECT_QAPIFIED qemumonitorjsontest: Remove bomb guarding object-add tests: qemucapabilities: Update qemu caps for object-add qapification [DON'T PUSH] Force-check all configs with latest capabilities src/qemu/qemu_capabilities.c | 4 + src/qemu/qemu_capabilities.h | 3 + src/qemu/qemu_command.c | 326 +- src/qemu/qemu_monitor.c | 78 +- src/qemu/qemu_monitor.h | 4 - src/util/virqemu.c | 48 +- src/util/virqemu.h | 3 +- .../caps_6.0.0.x86_64.replies | 3238 ++++++++++++----- .../caps_6.0.0.x86_64.xml | 83 +- tests/qemumonitorjsontest.c | 14 - ...v-missing-platform-info.x86_64-2.12.0.args | 2 +- .../launch-security-sev.x86_64-2.12.0.args | 2 +- tests/qemuxml2argvtest.c | 24 +- 13 files changed, 2775 insertions(+), 1054 deletions(-) -- 2.29.2

While the 'masterKey0' secret object will never be hotplugged we want to generate it through JSON so that we'll be able to validate all parameters of '-object' against the QAPI schema once 'object-add' is qapified in qemu. Signed-off-by: Peter Krempa <pkrempa@redhat.com> --- src/qemu/qemu_command.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index f255b0f881..9538bc9a2a 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -195,6 +195,7 @@ qemuBuildMasterKeyCommandLine(virCommandPtr cmd, g_autofree char *alias = NULL; g_autofree char *path = NULL; g_auto(virBuffer) buf = VIR_BUFFER_INITIALIZER; + g_autoptr(virJSONValue) props = NULL; /* If the -object secret does not exist, then just return. This just * means the domain won't be able to use a secret master key and is @@ -216,9 +217,16 @@ qemuBuildMasterKeyCommandLine(virCommandPtr cmd, if (!(path = qemuDomainGetMasterKeyFilePath(priv->libDir))) return -1; + if (qemuMonitorCreateObjectProps(&props, "secret", alias, + "s:format", "raw", + "s:file", path, + NULL) < 0) + return -1; + + if (virQEMUBuildObjectCommandlineFromJSON(&buf, props) < 0) + return -1; + virCommandAddArg(cmd, "-object"); - virBufferAsprintf(&buf, "secret,id=%s,format=raw,file=", alias); - virQEMUBuildBufferEscapeComma(&buf, path); virCommandAddArgBuffer(cmd, &buf); return 0; -- 2.29.2

On a Wednesday in 2021, Peter Krempa wrote:
While the 'masterKey0' secret object will never be hotplugged we want to generate it through JSON so that we'll be able to validate all parameters of '-object' against the QAPI schema once 'object-add' is qapified in qemu.
Signed-off-by: Peter Krempa <pkrempa@redhat.com> --- src/qemu/qemu_command.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-)
Reviewed-by: Ján Tomko <jtomko@redhat.com> Jano

While the 'sev0' sev-guest object will never be hotplugged, but we want to generate it through JSON so that we'll be able to validate all parameters of '-object' against the QAPI schema once 'object-add' is qapified in qemu. Signed-off-by: Peter Krempa <pkrempa@redhat.com> --- src/qemu/qemu_command.c | 32 +++++++++++-------- ...v-missing-platform-info.x86_64-2.12.0.args | 2 +- .../launch-security-sev.x86_64-2.12.0.args | 2 +- 3 files changed, 20 insertions(+), 16 deletions(-) diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 9538bc9a2a..579b00c029 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -9444,9 +9444,11 @@ static int qemuBuildSEVCommandLine(virDomainObjPtr vm, virCommandPtr cmd, virDomainSEVDefPtr sev) { + g_autoptr(virJSONValue) props = NULL; g_auto(virBuffer) buf = VIR_BUFFER_INITIALIZER; qemuDomainObjPrivatePtr priv = vm->privateData; - char *path = NULL; + g_autofree char *dhpath = NULL; + g_autofree char *sessionpath = NULL; if (!sev) return 0; @@ -9454,21 +9456,23 @@ qemuBuildSEVCommandLine(virDomainObjPtr vm, virCommandPtr cmd, VIR_DEBUG("policy=0x%x cbitpos=%d reduced_phys_bits=%d", sev->policy, sev->cbitpos, sev->reduced_phys_bits); - virBufferAsprintf(&buf, "sev-guest,id=sev0,cbitpos=%d", sev->cbitpos); - virBufferAsprintf(&buf, ",reduced-phys-bits=%d", sev->reduced_phys_bits); - virBufferAsprintf(&buf, ",policy=0x%x", sev->policy); + if (sev->dh_cert) + dhpath = g_strdup_printf("%s/dh_cert.base64", priv->libDir); - if (sev->dh_cert) { - path = g_strdup_printf("%s/dh_cert.base64", priv->libDir); - virBufferAsprintf(&buf, ",dh-cert-file=%s", path); - VIR_FREE(path); - } + if (sev->session) + sessionpath = g_strdup_printf("%s/session.base64", priv->libDir); - if (sev->session) { - path = g_strdup_printf("%s/session.base64", priv->libDir); - virBufferAsprintf(&buf, ",session-file=%s", path); - VIR_FREE(path); - } + if (qemuMonitorCreateObjectProps(&props, "sev-guest", "sev0", + "u:cbitpos", sev->cbitpos, + "u:reduced-phys-bits", sev->reduced_phys_bits, + "u:policy", sev->policy, + "S:dh-cert-file", dhpath, + "S:session-file", sessionpath, + NULL) < 0) + return -1; + + if (virQEMUBuildObjectCommandlineFromJSON(&buf, props) < 0) + return -1; virCommandAddArg(cmd, "-object"); virCommandAddArgBuffer(cmd, &buf); diff --git a/tests/qemuxml2argvdata/launch-security-sev-missing-platform-info.x86_64-2.12.0.args b/tests/qemuxml2argvdata/launch-security-sev-missing-platform-info.x86_64-2.12.0.args index f6cbd016df..717a21b7b0 100644 --- a/tests/qemuxml2argvdata/launch-security-sev-missing-platform-info.x86_64-2.12.0.args +++ b/tests/qemuxml2argvdata/launch-security-sev-missing-platform-info.x86_64-2.12.0.args @@ -29,7 +29,7 @@ file=/tmp/lib/domain--1-QEMUGuest1/master-key.aes \ -device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 \ -drive file=/dev/HostVG/QEMUGuest1,format=raw,if=none,id=drive-ide0-0-0 \ -device ide-hd,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0,bootindex=1 \ --object sev-guest,id=sev0,cbitpos=47,reduced-phys-bits=1,policy=0x1,\ +-object sev-guest,id=sev0,cbitpos=47,reduced-phys-bits=1,policy=1,\ dh-cert-file=/tmp/lib/domain--1-QEMUGuest1/dh_cert.base64,\ session-file=/tmp/lib/domain--1-QEMUGuest1/session.base64 \ -sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,\ diff --git a/tests/qemuxml2argvdata/launch-security-sev.x86_64-2.12.0.args b/tests/qemuxml2argvdata/launch-security-sev.x86_64-2.12.0.args index f6cbd016df..717a21b7b0 100644 --- a/tests/qemuxml2argvdata/launch-security-sev.x86_64-2.12.0.args +++ b/tests/qemuxml2argvdata/launch-security-sev.x86_64-2.12.0.args @@ -29,7 +29,7 @@ file=/tmp/lib/domain--1-QEMUGuest1/master-key.aes \ -device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 \ -drive file=/dev/HostVG/QEMUGuest1,format=raw,if=none,id=drive-ide0-0-0 \ -device ide-hd,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0,bootindex=1 \ --object sev-guest,id=sev0,cbitpos=47,reduced-phys-bits=1,policy=0x1,\ +-object sev-guest,id=sev0,cbitpos=47,reduced-phys-bits=1,policy=1,\ dh-cert-file=/tmp/lib/domain--1-QEMUGuest1/dh_cert.base64,\ session-file=/tmp/lib/domain--1-QEMUGuest1/session.base64 \ -sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,\ -- 2.29.2

On a Wednesday in 2021, Peter Krempa wrote:
While the 'sev0' sev-guest object will never be hotplugged, but we want to generate it through JSON so that we'll be able to validate all parameters of '-object' against the QAPI schema once 'object-add' is qapified in qemu.
Signed-off-by: Peter Krempa <pkrempa@redhat.com> --- src/qemu/qemu_command.c | 32 +++++++++++-------- ...v-missing-platform-info.x86_64-2.12.0.args | 2 +- .../launch-security-sev.x86_64-2.12.0.args | 2 +- 3 files changed, 20 insertions(+), 16 deletions(-)
Reviewed-by: Ján Tomko <jtomko@redhat.com> Jano

The commandline generator for 'iothread' objects has a private implementation of the properties. Convert it to JSON so that it can be later validated. Signed-off-by: Peter Krempa <pkrempa@redhat.com> --- src/qemu/qemu_command.c | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 579b00c029..7bdcdab95a 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -7228,15 +7228,19 @@ qemuBuildIOThreadCommandLine(virCommandPtr cmd, if (def->niothreadids == 0) return 0; - /* Create iothread objects using the defined iothreadids list - * and the defined id and name from the list. These may be used - * by a disk definition which will associate to an iothread by - * supplying a value of an id from the list - */ for (i = 0; i < def->niothreadids; i++) { + g_autoptr(virJSONValue) props = NULL; + g_auto(virBuffer) buf = VIR_BUFFER_INITIALIZER; + g_autofree char *alias = g_strdup_printf("iothread%u", def->iothreadids[i]->iothread_id); + + if (qemuMonitorCreateObjectProps(&props, "iothread", alias, NULL) < 0) + return -1; + + if (virQEMUBuildObjectCommandlineFromJSON(&buf, props) < 0) + return -1; + virCommandAddArg(cmd, "-object"); - virCommandAddArgFormat(cmd, "iothread,id=iothread%u", - def->iothreadids[i]->iothread_id); + virCommandAddArgBuffer(cmd, &buf); } return 0; -- 2.29.2

On a Wednesday in 2021, Peter Krempa wrote:
The commandline generator for 'iothread' objects has a private implementation of the properties. Convert it to JSON so that it can be later validated.
Signed-off-by: Peter Krempa <pkrempa@redhat.com> --- src/qemu/qemu_command.c | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-)
Reviewed-by: Ján Tomko <jtomko@redhat.com> Jano

Starting from qemu-6.0 the parameters of -object/object-add are formally described by the QAPI schema. Additionally this changes the nesting of the properties as the 'props' nested object will be flattened to the parent. We'll need to detect whether qemu switched to this new approach to generate the objects with proper nesting and also allow testing. The capability is based on the presence of the 'secret' object in the 'qom-type' enum. Signed-off-by: Peter Krempa <pkrempa@redhat.com> --- src/qemu/qemu_capabilities.c | 4 ++++ src/qemu/qemu_capabilities.h | 3 +++ 2 files changed, 7 insertions(+) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index f40d6d77be..d1452f6354 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -618,6 +618,9 @@ VIR_ENUM_IMPL(virQEMUCaps, "memory-backend-file.x-use-canonical-path-for-ramblock-id", "vnc-opts", "migration-param.block-bitmap-mapping", + + /* 395 */ + "object.qapified", ); @@ -1553,6 +1556,7 @@ static struct virQEMUCapsStringFlags virQEMUCapsQMPSchemaQueries[] = { { "netdev_add/arg-type/+vhost-vdpa", QEMU_CAPS_NETDEV_VHOST_VDPA }, { "migrate-set-parameters/arg-type/block-bitmap-mapping/bitmaps/transform", QEMU_CAPS_MIGRATION_PARAM_BLOCK_BITMAP_MAPPING }, + { "object-add/arg-type/qom-type/^secret", QEMU_CAPS_OBJECT_QAPIFIED }, }; typedef struct _virQEMUCapsObjectTypeProps virQEMUCapsObjectTypeProps; diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h index a5b6c7f104..193432246d 100644 --- a/src/qemu/qemu_capabilities.h +++ b/src/qemu/qemu_capabilities.h @@ -599,6 +599,9 @@ typedef enum { /* virQEMUCapsFlags grouping marker for syntax-check */ QEMU_CAPS_VNC_OPTS, /* -vnc uses QemuOpts parser instead of custom code */ QEMU_CAPS_MIGRATION_PARAM_BLOCK_BITMAP_MAPPING, /* block-bitmap-mapping in migrate-set-parameters */ + /* 395 */ + QEMU_CAPS_OBJECT_QAPIFIED, /* parameters for object-add are formally described */ + QEMU_CAPS_LAST /* this must always be the last item */ } virQEMUCapsFlags; -- 2.29.2

On a Wednesday in 2021, Peter Krempa wrote:
Starting from qemu-6.0 the parameters of -object/object-add are formally described by the QAPI schema. Additionally this changes the nesting of the properties as the 'props' nested object will be flattened to the parent.
We'll need to detect whether qemu switched to this new approach to generate the objects with proper nesting and also allow testing.
The capability is based on the presence of the 'secret' object in the 'qom-type' enum.
Signed-off-by: Peter Krempa <pkrempa@redhat.com> --- src/qemu/qemu_capabilities.c | 4 ++++ src/qemu/qemu_capabilities.h | 3 +++ 2 files changed, 7 insertions(+)
Reviewed-by: Ján Tomko <jtomko@redhat.com> Jano

Similarly to the validation for blockdev-add and netdev_add, use the qemuxml2argv test repository to drive validation of props for object-add. Signed-off-by: Peter Krempa <pkrempa@redhat.com> --- tests/qemuxml2argvtest.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c index d6d707cd24..a5e40c218a 100644 --- a/tests/qemuxml2argvtest.c +++ b/tests/qemuxml2argvtest.c @@ -527,6 +527,7 @@ testCompareXMLToArgvValidateSchema(virQEMUDriverPtr drv, g_autoptr(virCommand) cmd = NULL; unsigned int parseFlags = info->parseFlags; bool netdevQAPIfied = false; + bool objectQAPIfied = false; /* comment out with line comment to enable schema checking for non _CAPS tests if (!info->schemafile) @@ -570,6 +571,7 @@ testCompareXMLToArgvValidateSchema(virQEMUDriverPtr drv, return -1; netdevQAPIfied = !virQEMUQAPISchemaPathExists("netdev_add/arg-type/type/!string", schema); + objectQAPIfied = virQEMUQAPISchemaPathExists("object-add/arg-type/qom-type/^secret", schema); for (i = 0; i < nargs; i++) { g_auto(virBuffer) debug = VIR_BUFFER_INITIALIZER; @@ -603,6 +605,24 @@ testCompareXMLToArgvValidateSchema(virQEMUDriverPtr drv, return -1; } + i++; + } else if (STREQ(args[i], "-object")) { + + if (!objectQAPIfied) { + i++; + continue; + } + + if (!(jsonargs = virJSONValueFromString(args[i + 1]))) + return -1; + + if (testQEMUSchemaValidateCommand("object-add", jsonargs, + schema, false, false, &debug) < 0) { + VIR_TEST_VERBOSE("failed to validate -object '%s' against QAPI schema: %s", + args[i + 1], virBufferCurrentContent(&debug)); + return -1; + } + i++; } } -- 2.29.2

The qemu commandline builder's QEMU_BUILD_COMMANDLINE_VALIDATE_KEEP_JSON flag disables JSON->commandline conversion so that our qemuxml2argvtest can use the commandline test repostitory for validating our JSON props generators which are in many cases used on the montitor where we need to conform to the schema. Wire this up for the -object/object-add pair by adding a flag to virQEMUBuildObjectCommandlineFromJSON to pass through JSON and pipe through the 'flags' variable where necessary. Signed-off-by: Peter Krempa <pkrempa@redhat.com> --- src/qemu/qemu_command.c | 264 ++++++++++++++++++++++++---------------- src/util/virqemu.c | 16 ++- src/util/virqemu.h | 3 +- 3 files changed, 176 insertions(+), 107 deletions(-) diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 7bdcdab95a..c4bb6a87bb 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -190,7 +190,8 @@ VIR_ENUM_IMPL(qemuNumaPolicy, */ static int qemuBuildMasterKeyCommandLine(virCommandPtr cmd, - qemuDomainObjPrivatePtr priv) + qemuDomainObjPrivatePtr priv, + unsigned int flags) { g_autofree char *alias = NULL; g_autofree char *path = NULL; @@ -223,7 +224,8 @@ qemuBuildMasterKeyCommandLine(virCommandPtr cmd, NULL) < 0) return -1; - if (virQEMUBuildObjectCommandlineFromJSON(&buf, props) < 0) + if (virQEMUBuildObjectCommandlineFromJSON(&buf, props, + (flags & QEMU_BUILD_COMMANDLINE_VALIDATE_KEEP_JSON)) < 0) return -1; virCommandAddArg(cmd, "-object"); @@ -699,6 +701,7 @@ qemuBuildSecretInfoProps(qemuDomainSecretInfoPtr secinfo, * qemuBuildObjectSecretCommandLine: * @cmd: the command to modify * @secinfo: pointer to the secret info object + * @flags: commandline builder flags * * If the secinfo is available and associated with an AES secret, * then format the command line for the secret object. This object @@ -709,7 +712,8 @@ qemuBuildSecretInfoProps(qemuDomainSecretInfoPtr secinfo, */ static int qemuBuildObjectSecretCommandLine(virCommandPtr cmd, - qemuDomainSecretInfoPtr secinfo) + qemuDomainSecretInfoPtr secinfo, + unsigned int flags) { g_auto(virBuffer) buf = VIR_BUFFER_INITIALIZER; g_autoptr(virJSONValue) props = NULL; @@ -717,7 +721,8 @@ qemuBuildObjectSecretCommandLine(virCommandPtr cmd, if (qemuBuildSecretInfoProps(secinfo, &props) < 0) return -1; - if (virQEMUBuildObjectCommandlineFromJSON(&buf, props) < 0) + if (virQEMUBuildObjectCommandlineFromJSON(&buf, props, + (flags & QEMU_BUILD_COMMANDLINE_VALIDATE_KEEP_JSON)) < 0) return -1; virCommandAddArg(cmd, "-object"); @@ -865,6 +870,7 @@ qemuBuildTLSx509BackendProps(const char *tlspath, * (optional) * @alias: TLS object alias * @qemuCaps: capabilities + * @flags: commandline builder flags * * Create the command line for a TLS object * @@ -877,7 +883,8 @@ qemuBuildTLSx509CommandLine(virCommandPtr cmd, bool verifypeer, const char *certEncSecretAlias, const char *alias, - virQEMUCapsPtr qemuCaps) + virQEMUCapsPtr qemuCaps, + unsigned int flags) { g_auto(virBuffer) buf = VIR_BUFFER_INITIALIZER; g_autoptr(virJSONValue) props = NULL; @@ -886,7 +893,8 @@ qemuBuildTLSx509CommandLine(virCommandPtr cmd, certEncSecretAlias, qemuCaps, &props) < 0) return -1; - if (virQEMUBuildObjectCommandlineFromJSON(&buf, props) < 0) + if (virQEMUBuildObjectCommandlineFromJSON(&buf, props, + (flags & QEMU_BUILD_COMMANDLINE_VALIDATE_KEEP_JSON)) < 0) return -1; virCommandAddArg(cmd, "-object"); @@ -1976,14 +1984,16 @@ qemuBuildFloppyCommandLineControllerOptions(virCommandPtr cmd, static int qemuBuildObjectCommandline(virCommandPtr cmd, - virJSONValuePtr objProps) + virJSONValuePtr objProps, + unsigned int flags) { g_auto(virBuffer) buf = VIR_BUFFER_INITIALIZER; if (!objProps) return 0; - if (virQEMUBuildObjectCommandlineFromJSON(&buf, objProps) < 0) + if (virQEMUBuildObjectCommandlineFromJSON(&buf, objProps, + (flags & QEMU_BUILD_COMMANDLINE_VALIDATE_KEEP_JSON)) < 0) return -1; virCommandAddArg(cmd, "-object"); @@ -1995,16 +2005,17 @@ qemuBuildObjectCommandline(virCommandPtr cmd, static int qemuBuildBlockStorageSourceAttachDataCommandline(virCommandPtr cmd, - qemuBlockStorageSourceAttachDataPtr data) + qemuBlockStorageSourceAttachDataPtr data, + unsigned int flags) { char *tmp; - if (qemuBuildObjectCommandline(cmd, data->prmgrProps) < 0 || - qemuBuildObjectCommandline(cmd, data->authsecretProps) < 0 || - qemuBuildObjectCommandline(cmd, data->encryptsecretProps) < 0 || - qemuBuildObjectCommandline(cmd, data->httpcookiesecretProps) < 0 || - qemuBuildObjectCommandline(cmd, data->tlsKeySecretProps) < 0 || - qemuBuildObjectCommandline(cmd, data->tlsProps) < 0) + if (qemuBuildObjectCommandline(cmd, data->prmgrProps, flags) < 0 || + qemuBuildObjectCommandline(cmd, data->authsecretProps, flags) < 0 || + qemuBuildObjectCommandline(cmd, data->encryptsecretProps, flags) < 0 || + qemuBuildObjectCommandline(cmd, data->httpcookiesecretProps, flags) < 0 || + qemuBuildObjectCommandline(cmd, data->tlsKeySecretProps, flags) < 0 || + qemuBuildObjectCommandline(cmd, data->tlsProps, flags) < 0) return -1; if (data->driveCmd) @@ -2044,7 +2055,8 @@ qemuBuildBlockStorageSourceAttachDataCommandline(virCommandPtr cmd, static int qemuBuildDiskSourceCommandLine(virCommandPtr cmd, virDomainDiskDefPtr disk, - virQEMUCapsPtr qemuCaps) + virQEMUCapsPtr qemuCaps, + unsigned int flags) { g_autoptr(qemuBlockStorageSourceChainData) data = NULL; g_autoptr(virJSONValue) copyOnReadProps = NULL; @@ -2073,7 +2085,8 @@ qemuBuildDiskSourceCommandLine(virCommandPtr cmd, for (i = data->nsrcdata; i > 0; i--) { if (qemuBuildBlockStorageSourceAttachDataCommandline(cmd, - data->srcdata[i - 1]) < 0) + data->srcdata[i - 1], + flags) < 0) return -1; } @@ -2093,11 +2106,12 @@ qemuBuildDiskCommandLine(virCommandPtr cmd, const virDomainDef *def, virDomainDiskDefPtr disk, virQEMUCapsPtr qemuCaps, - unsigned int bootindex) + unsigned int bootindex, + unsigned int flags) { g_autofree char *optstr = NULL; - if (qemuBuildDiskSourceCommandLine(cmd, disk, qemuCaps) < 0) + if (qemuBuildDiskSourceCommandLine(cmd, disk, qemuCaps, flags) < 0) return -1; /* SD cards are currently instantiated via -drive if=sd, so the -device @@ -2128,7 +2142,8 @@ qemuBuildDiskCommandLine(virCommandPtr cmd, static int qemuBuildDisksCommandLine(virCommandPtr cmd, const virDomainDef *def, - virQEMUCapsPtr qemuCaps) + virQEMUCapsPtr qemuCaps, + unsigned int flags) { size_t i; unsigned int bootCD = 0; @@ -2181,7 +2196,7 @@ qemuBuildDisksCommandLine(virCommandPtr cmd, if (disk->device == VIR_DOMAIN_DISK_DEVICE_FLOPPY) bootindex = 0; - if (qemuBuildDiskCommandLine(cmd, def, disk, qemuCaps, bootindex) < 0) + if (qemuBuildDiskCommandLine(cmd, def, disk, qemuCaps, bootindex, flags) < 0) return -1; } @@ -3282,7 +3297,8 @@ qemuBuildMemoryCellBackendStr(virDomainDefPtr def, virQEMUDriverConfigPtr cfg, size_t cell, qemuDomainObjPrivatePtr priv, - virBufferPtr buf) + virBufferPtr buf, + unsigned int flags) { g_autoptr(virJSONValue) props = NULL; g_autofree char *alias = NULL; @@ -3301,7 +3317,8 @@ qemuBuildMemoryCellBackendStr(virDomainDefPtr def, priv, def, &mem, false, false)) < 0) return -1; - if (virQEMUBuildObjectCommandlineFromJSON(buf, props) < 0) + if (virQEMUBuildObjectCommandlineFromJSON(buf, props, + (flags & QEMU_BUILD_COMMANDLINE_VALIDATE_KEEP_JSON)) < 0) return -1; return rc; @@ -3313,7 +3330,8 @@ qemuBuildMemoryDimmBackendStr(virBufferPtr buf, virDomainMemoryDefPtr mem, virDomainDefPtr def, virQEMUDriverConfigPtr cfg, - qemuDomainObjPrivatePtr priv) + qemuDomainObjPrivatePtr priv, + unsigned int flags) { g_autoptr(virJSONValue) props = NULL; g_autofree char *alias = NULL; @@ -3330,7 +3348,8 @@ qemuBuildMemoryDimmBackendStr(virBufferPtr buf, priv, def, mem, true, false) < 0) return -1; - if (virQEMUBuildObjectCommandlineFromJSON(buf, props) < 0) + if (virQEMUBuildObjectCommandlineFromJSON(buf, props, + (flags & QEMU_BUILD_COMMANDLINE_VALIDATE_KEEP_JSON)) < 0) return -1; return 0; @@ -4829,7 +4848,8 @@ qemuBuildChrChardevStr(virLogManagerPtr logManager, const virDomainChrSourceDef *dev, const char *alias, virQEMUCapsPtr qemuCaps, - unsigned int cdevflags) + unsigned int cdevflags, + unsigned int flags) { qemuDomainChrSourcePrivatePtr chrSourcePriv = QEMU_DOMAIN_CHR_SOURCE_PRIVATE(dev); g_auto(virBuffer) buf = VIR_BUFFER_INITIALIZER; @@ -4927,7 +4947,7 @@ qemuBuildChrChardevStr(virLogManagerPtr logManager, * functions can just check the config fields */ if (chrSourcePriv && chrSourcePriv->secinfo) { if (qemuBuildObjectSecretCommandLine(cmd, - chrSourcePriv->secinfo) < 0) + chrSourcePriv->secinfo, flags) < 0) return NULL; tlsCertEncSecAlias = chrSourcePriv->secinfo->s.aes.alias; @@ -4940,7 +4960,7 @@ qemuBuildChrChardevStr(virLogManagerPtr logManager, dev->data.tcp.listen, cfg->chardevTLSx509verify, tlsCertEncSecAlias, - objalias, qemuCaps) < 0) { + objalias, qemuCaps, flags) < 0) { return NULL; } @@ -5156,7 +5176,8 @@ static int qemuBuildHostdevSCSICommandLine(virCommandPtr cmd, const virDomainDef *def, virDomainHostdevDefPtr hostdev, - virQEMUCapsPtr qemuCaps) + virQEMUCapsPtr qemuCaps, + unsigned int flags) { g_autoptr(qemuBlockStorageSourceAttachData) data = NULL; g_autofree char *devstr = NULL; @@ -5165,7 +5186,7 @@ qemuBuildHostdevSCSICommandLine(virCommandPtr cmd, if (!(data = qemuBuildHostdevSCSIAttachPrepare(hostdev, &backendAlias, qemuCaps))) return -1; - if (qemuBuildBlockStorageSourceAttachDataCommandline(cmd, data) < 0) + if (qemuBuildBlockStorageSourceAttachDataCommandline(cmd, data, flags) < 0) return -1; virCommandAddArg(cmd, "-device"); @@ -5181,7 +5202,8 @@ static int qemuBuildHostdevCommandLine(virCommandPtr cmd, const virDomainDef *def, virQEMUCapsPtr qemuCaps, - unsigned int *bootHostdevNet) + unsigned int *bootHostdevNet, + unsigned int flags) { size_t i; @@ -5235,7 +5257,7 @@ qemuBuildHostdevCommandLine(virCommandPtr cmd, /* SCSI */ case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI: - if (qemuBuildHostdevSCSICommandLine(cmd, def, hostdev, qemuCaps) < 0) + if (qemuBuildHostdevSCSICommandLine(cmd, def, hostdev, qemuCaps, flags) < 0) return -1; break; @@ -5301,7 +5323,8 @@ qemuBuildMonitorCommandLine(virLogManagerPtr logManager, virCommandPtr cmd, virQEMUDriverConfigPtr cfg, virDomainDefPtr def, - qemuDomainObjPrivatePtr priv) + qemuDomainObjPrivatePtr priv, + unsigned int flags) { g_autofree char *chrdev = NULL; unsigned int cdevflags = QEMU_BUILD_CHARDEV_TCP_NOWAIT | @@ -5315,7 +5338,7 @@ qemuBuildMonitorCommandLine(virLogManagerPtr logManager, if (!(chrdev = qemuBuildChrChardevStr(logManager, secManager, cmd, cfg, def, priv->monConfig, "monitor", - priv->qemuCaps, cdevflags))) + priv->qemuCaps, cdevflags, flags))) return -1; virCommandAddArg(cmd, "-chardev"); virCommandAddArg(cmd, chrdev); @@ -5423,7 +5446,8 @@ qemuBuildRNGBackendChrdevStr(virLogManagerPtr logManager, virDomainRNGDefPtr rng, virQEMUCapsPtr qemuCaps, char **chr, - bool chardevStdioLogd) + bool chardevStdioLogd, + unsigned int flags) { unsigned int cdevflags = QEMU_BUILD_CHARDEV_TCP_NOWAIT | QEMU_BUILD_CHARDEV_UNIX_FD_PASS; @@ -5445,7 +5469,7 @@ qemuBuildRNGBackendChrdevStr(virLogManagerPtr logManager, cmd, cfg, def, rng->source.chardev, rng->info.alias, qemuCaps, - cdevflags))) + cdevflags, flags))) return -1; break; } @@ -5541,7 +5565,8 @@ qemuBuildRNGCommandLine(virLogManagerPtr logManager, virQEMUDriverConfigPtr cfg, const virDomainDef *def, virQEMUCapsPtr qemuCaps, - bool chardevStdioLogd) + bool chardevStdioLogd, + unsigned int flags) { size_t i; @@ -5562,7 +5587,7 @@ qemuBuildRNGCommandLine(virLogManagerPtr logManager, /* possibly add character device for backend */ if (qemuBuildRNGBackendChrdevStr(logManager, secManager, cmd, cfg, def, rng, qemuCaps, &chardev, - chardevStdioLogd) < 0) + chardevStdioLogd, flags) < 0) return -1; if (chardev) @@ -5571,7 +5596,8 @@ qemuBuildRNGCommandLine(virLogManagerPtr logManager, if (qemuBuildRNGBackendProps(rng, &props) < 0) return -1; - rc = virQEMUBuildObjectCommandlineFromJSON(&buf, props); + rc = virQEMUBuildObjectCommandlineFromJSON(&buf, props, + (flags & QEMU_BUILD_COMMANDLINE_VALIDATE_KEEP_JSON)); if (rc < 0) return -1; @@ -7133,7 +7159,8 @@ static int qemuBuildMemCommandLineMemoryDefaultBackend(virCommandPtr cmd, const virDomainDef *def, qemuDomainObjPrivatePtr priv, - const char *defaultRAMid) + const char *defaultRAMid, + unsigned int flags) { g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(priv->driver); g_autoptr(virJSONValue) props = NULL; @@ -7148,7 +7175,8 @@ qemuBuildMemCommandLineMemoryDefaultBackend(virCommandPtr cmd, priv, def, &mem, false, true) < 0) return -1; - if (virQEMUBuildObjectCommandlineFromJSON(&buf, props) < 0) + if (virQEMUBuildObjectCommandlineFromJSON(&buf, props, + (flags & QEMU_BUILD_COMMANDLINE_VALIDATE_KEEP_JSON)) < 0) return -1; virCommandAddArg(cmd, "-object"); @@ -7161,7 +7189,8 @@ static int qemuBuildMemCommandLine(virCommandPtr cmd, const virDomainDef *def, virQEMUCapsPtr qemuCaps, - qemuDomainObjPrivatePtr priv) + qemuDomainObjPrivatePtr priv, + unsigned int flags) { const char *defaultRAMid = NULL; @@ -7190,7 +7219,7 @@ qemuBuildMemCommandLine(virCommandPtr cmd, * However, if domain has one or more NUMA nodes then there is no * default RAM and we mustn't generate the memory object. */ if (!virDomainNumaGetNodeCount(def->numa)) - qemuBuildMemCommandLineMemoryDefaultBackend(cmd, def, priv, defaultRAMid); + qemuBuildMemCommandLineMemoryDefaultBackend(cmd, def, priv, defaultRAMid, flags); } else { if (def->mem.allocation == VIR_DOMAIN_MEMORY_ALLOCATION_IMMEDIATE) { virCommandAddArgList(cmd, "-mem-prealloc", NULL); @@ -7221,7 +7250,8 @@ qemuBuildMemCommandLine(virCommandPtr cmd, static int qemuBuildIOThreadCommandLine(virCommandPtr cmd, - const virDomainDef *def) + const virDomainDef *def, + unsigned int flags) { size_t i; @@ -7236,7 +7266,8 @@ qemuBuildIOThreadCommandLine(virCommandPtr cmd, if (qemuMonitorCreateObjectProps(&props, "iothread", alias, NULL) < 0) return -1; - if (virQEMUBuildObjectCommandlineFromJSON(&buf, props) < 0) + if (virQEMUBuildObjectCommandlineFromJSON(&buf, props, + (flags & QEMU_BUILD_COMMANDLINE_VALIDATE_KEEP_JSON)) < 0) return -1; virCommandAddArg(cmd, "-object"); @@ -7379,7 +7410,8 @@ static int qemuBuildNumaCommandLine(virQEMUDriverConfigPtr cfg, virDomainDefPtr def, virCommandPtr cmd, - qemuDomainObjPrivatePtr priv) + qemuDomainObjPrivatePtr priv, + unsigned int flags) { size_t i, j; virQEMUCapsPtr qemuCaps = priv->qemuCaps; @@ -7416,7 +7448,7 @@ qemuBuildNumaCommandLine(virQEMUDriverConfigPtr cfg, for (i = 0; i < ncells; i++) { if ((rc = qemuBuildMemoryCellBackendStr(def, cfg, i, priv, - &nodeBackends[i])) < 0) + &nodeBackends[i], flags)) < 0) goto cleanup; if (rc == 0) @@ -7530,7 +7562,8 @@ static int qemuBuildMemoryDeviceCommandLine(virCommandPtr cmd, virQEMUDriverConfigPtr cfg, virDomainDefPtr def, - qemuDomainObjPrivatePtr priv) + qemuDomainObjPrivatePtr priv, + unsigned int flags) { size_t i; @@ -7540,7 +7573,7 @@ qemuBuildMemoryDeviceCommandLine(virCommandPtr cmd, g_auto(virBuffer) buf = VIR_BUFFER_INITIALIZER; char *dimmStr; - if (qemuBuildMemoryDimmBackendStr(&buf, def->mems[i], def, cfg, priv) < 0) + if (qemuBuildMemoryDimmBackendStr(&buf, def->mems[i], def, cfg, priv, flags) < 0) return -1; virCommandAddArg(cmd, "-object"); @@ -7597,7 +7630,8 @@ static int qemuBuildGraphicsVNCCommandLine(virQEMUDriverConfigPtr cfg, virCommandPtr cmd, virQEMUCapsPtr qemuCaps, - virDomainGraphicsDefPtr graphics) + virDomainGraphicsDefPtr graphics, + unsigned int flags) { g_auto(virBuffer) opt = VIR_BUFFER_INITIALIZER; virDomainGraphicsListenDefPtr glisten = NULL; @@ -7670,7 +7704,7 @@ qemuBuildGraphicsVNCCommandLine(virQEMUDriverConfigPtr cfg, if (gfxPriv->secinfo) { if (qemuBuildObjectSecretCommandLine(cmd, - gfxPriv->secinfo) < 0) + gfxPriv->secinfo, flags) < 0) return -1; secretAlias = gfxPriv->secinfo->s.aes.alias; } @@ -7681,7 +7715,8 @@ qemuBuildGraphicsVNCCommandLine(virQEMUDriverConfigPtr cfg, cfg->vncTLSx509verify, secretAlias, gfxPriv->tlsAlias, - qemuCaps) < 0) + qemuCaps, + flags) < 0) return -1; virBufferAsprintf(&opt, ",tls-creds=%s", gfxPriv->tlsAlias); @@ -7965,7 +8000,8 @@ static int qemuBuildGraphicsCommandLine(virQEMUDriverConfigPtr cfg, virCommandPtr cmd, virDomainDefPtr def, - virQEMUCapsPtr qemuCaps) + virQEMUCapsPtr qemuCaps, + unsigned int flags) { size_t i; @@ -7981,7 +8017,7 @@ qemuBuildGraphicsCommandLine(virQEMUDriverConfigPtr cfg, break; case VIR_DOMAIN_GRAPHICS_TYPE_VNC: if (qemuBuildGraphicsVNCCommandLine(cfg, cmd, - qemuCaps, graphics) < 0) + qemuCaps, graphics, flags) < 0) return -1; break; @@ -8018,7 +8054,8 @@ qemuInterfaceVhostuserConnect(virQEMUDriverPtr driver, virDomainDefPtr def, virDomainNetDefPtr net, virQEMUCapsPtr qemuCaps, - char **chardev) + char **chardev, + unsigned int flags) { g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver); @@ -8027,7 +8064,7 @@ qemuInterfaceVhostuserConnect(virQEMUDriverPtr driver, if (!(*chardev = qemuBuildChrChardevStr(logManager, secManager, cmd, cfg, def, net->data.vhostuser, - net->info.alias, qemuCaps, 0))) + net->info.alias, qemuCaps, 0, flags))) return -1; break; @@ -8155,7 +8192,7 @@ qemuBuildInterfaceCommandLine(virQEMUDriverPtr driver, requireNicdev = true; if (qemuInterfaceVhostuserConnect(driver, logManager, secManager, - cmd, def, net, qemuCaps, &chardev) < 0) + cmd, def, net, qemuCaps, &chardev, flags) < 0) goto cleanup; if (virNetDevOpenvswitchGetVhostuserIfname(net->data.vhostuser->data.nix.path, @@ -8484,7 +8521,8 @@ qemuBuildSmartcardCommandLine(virLogManagerPtr logManager, virQEMUDriverConfigPtr cfg, const virDomainDef *def, virQEMUCapsPtr qemuCaps, - bool chardevStdioLogd) + bool chardevStdioLogd, + unsigned int flags) { size_t i; virDomainSmartcardDefPtr smartcard; @@ -8539,7 +8577,7 @@ qemuBuildSmartcardCommandLine(virLogManagerPtr logManager, cmd, cfg, def, smartcard->data.passthru, smartcard->info.alias, - qemuCaps, cdevflags))) { + qemuCaps, cdevflags, flags))) { return -1; } virCommandAddArg(cmd, "-chardev"); @@ -8674,7 +8712,8 @@ qemuBuildShmemCommandLine(virLogManagerPtr logManager, virDomainDefPtr def, virDomainShmemDefPtr shmem, virQEMUCapsPtr qemuCaps, - bool chardevStdioLogd) + bool chardevStdioLogd, + unsigned int flags) { g_autoptr(virJSONValue) memProps = NULL; g_auto(virBuffer) buf = VIR_BUFFER_INITIALIZER; @@ -8721,7 +8760,8 @@ qemuBuildShmemCommandLine(virLogManagerPtr logManager, if (!(memProps = qemuBuildShmemBackendMemProps(shmem))) return -1; - rc = virQEMUBuildObjectCommandlineFromJSON(&buf, memProps); + rc = virQEMUBuildObjectCommandlineFromJSON(&buf, memProps, + (flags & QEMU_BUILD_COMMANDLINE_VALIDATE_KEEP_JSON)); if (rc < 0) return -1; @@ -8751,7 +8791,7 @@ qemuBuildShmemCommandLine(virLogManagerPtr logManager, cmd, cfg, def, &shmem->server.chr, shmem->info.alias, qemuCaps, - cdevflags); + cdevflags, flags); if (!chardev) return -1; @@ -8851,7 +8891,8 @@ qemuBuildSerialCommandLine(virLogManagerPtr logManager, virQEMUDriverConfigPtr cfg, const virDomainDef *def, virQEMUCapsPtr qemuCaps, - bool chardevStdioLogd) + bool chardevStdioLogd, + unsigned int flags) { size_t i; bool havespice = false; @@ -8878,7 +8919,7 @@ qemuBuildSerialCommandLine(virLogManagerPtr logManager, cmd, cfg, def, serial->source, serial->info.alias, - qemuCaps, cdevflags))) + qemuCaps, cdevflags, flags))) return -1; virCommandAddArg(cmd, "-chardev"); virCommandAddArg(cmd, devstr); @@ -8915,7 +8956,8 @@ qemuBuildParallelsCommandLine(virLogManagerPtr logManager, virQEMUDriverConfigPtr cfg, const virDomainDef *def, virQEMUCapsPtr qemuCaps, - bool chardevStdioLogd) + bool chardevStdioLogd, + unsigned int flags) { size_t i; unsigned int cdevflags = QEMU_BUILD_CHARDEV_TCP_NOWAIT | @@ -8931,7 +8973,7 @@ qemuBuildParallelsCommandLine(virLogManagerPtr logManager, cmd, cfg, def, parallel->source, parallel->info.alias, - qemuCaps, cdevflags))) + qemuCaps, cdevflags, flags))) return -1; virCommandAddArg(cmd, "-chardev"); virCommandAddArg(cmd, devstr); @@ -8971,7 +9013,7 @@ qemuBuildChannelsCommandLine(virLogManagerPtr logManager, cmd, cfg, def, channel->source, channel->info.alias, - qemuCaps, cdevflags))) + qemuCaps, cdevflags, flags))) return -1; virCommandAddArg(cmd, "-chardev"); @@ -9012,7 +9054,8 @@ qemuBuildConsoleCommandLine(virLogManagerPtr logManager, virQEMUDriverConfigPtr cfg, const virDomainDef *def, virQEMUCapsPtr qemuCaps, - bool chardevStdioLogd) + bool chardevStdioLogd, + unsigned int flags) { size_t i; unsigned int cdevflags = QEMU_BUILD_CHARDEV_TCP_NOWAIT | @@ -9031,7 +9074,7 @@ qemuBuildConsoleCommandLine(virLogManagerPtr logManager, cmd, cfg, def, console->source, console->info.alias, - qemuCaps, cdevflags))) + qemuCaps, cdevflags, flags))) return -1; virCommandAddArg(cmd, "-chardev"); virCommandAddArg(cmd, devstr); @@ -9046,7 +9089,7 @@ qemuBuildConsoleCommandLine(virLogManagerPtr logManager, cmd, cfg, def, console->source, console->info.alias, - qemuCaps, cdevflags))) + qemuCaps, cdevflags, flags))) return -1; virCommandAddArg(cmd, "-chardev"); virCommandAddArg(cmd, devstr); @@ -9061,7 +9104,7 @@ qemuBuildConsoleCommandLine(virLogManagerPtr logManager, cmd, cfg, def, console->source, console->info.alias, - qemuCaps, cdevflags))) + qemuCaps, cdevflags, flags))) return -1; virCommandAddArg(cmd, "-chardev"); virCommandAddArg(cmd, devstr); @@ -9143,7 +9186,8 @@ qemuBuildRedirdevCommandLine(virLogManagerPtr logManager, virQEMUDriverConfigPtr cfg, const virDomainDef *def, virQEMUCapsPtr qemuCaps, - bool chardevStdioLogd) + bool chardevStdioLogd, + unsigned int flags) { size_t i; unsigned int cdevflags = QEMU_BUILD_CHARDEV_TCP_NOWAIT | @@ -9159,7 +9203,7 @@ qemuBuildRedirdevCommandLine(virLogManagerPtr logManager, cmd, cfg, def, redirdev->source, redirdev->info.alias, - qemuCaps, cdevflags))) { + qemuCaps, cdevflags, flags))) { return -1; } @@ -9445,8 +9489,10 @@ qemuBuildTPMsCommandLine(virCommandPtr cmd, static int -qemuBuildSEVCommandLine(virDomainObjPtr vm, virCommandPtr cmd, - virDomainSEVDefPtr sev) +qemuBuildSEVCommandLine(virDomainObjPtr vm, + virCommandPtr cmd, + virDomainSEVDefPtr sev, + unsigned int flags) { g_autoptr(virJSONValue) props = NULL; g_auto(virBuffer) buf = VIR_BUFFER_INITIALIZER; @@ -9475,7 +9521,8 @@ qemuBuildSEVCommandLine(virDomainObjPtr vm, virCommandPtr cmd, NULL) < 0) return -1; - if (virQEMUBuildObjectCommandlineFromJSON(&buf, props) < 0) + if (virQEMUBuildObjectCommandlineFromJSON(&buf, props, + (flags & QEMU_BUILD_COMMANDLINE_VALIDATE_KEEP_JSON)) < 0) return -1; virCommandAddArg(cmd, "-object"); @@ -9582,7 +9629,8 @@ qemuBuildPRManagerInfoProps(virStorageSourcePtr src) static int qemuBuildManagedPRCommandLine(virCommandPtr cmd, const virDomainDef *def, - qemuDomainObjPrivatePtr priv) + qemuDomainObjPrivatePtr priv, + unsigned int flags) { g_auto(virBuffer) buf = VIR_BUFFER_INITIALIZER; g_autoptr(virJSONValue) props = NULL; @@ -9593,7 +9641,8 @@ qemuBuildManagedPRCommandLine(virCommandPtr cmd, if (!(props = qemuBuildPRManagedManagerInfoProps(priv))) return -1; - if (virQEMUBuildObjectCommandlineFromJSON(&buf, props) < 0) + if (virQEMUBuildObjectCommandlineFromJSON(&buf, props, + (flags & QEMU_BUILD_COMMANDLINE_VALIDATE_KEEP_JSON)) < 0) return -1; virCommandAddArg(cmd, "-object"); @@ -9606,7 +9655,8 @@ qemuBuildManagedPRCommandLine(virCommandPtr cmd, static int qemuBuildPflashBlockdevOne(virCommandPtr cmd, virStorageSourcePtr src, - virQEMUCapsPtr qemuCaps) + virQEMUCapsPtr qemuCaps, + unsigned int flags) { g_autoptr(qemuBlockStorageSourceChainData) data = NULL; size_t i; @@ -9617,7 +9667,8 @@ qemuBuildPflashBlockdevOne(virCommandPtr cmd, for (i = data->nsrcdata; i > 0; i--) { if (qemuBuildBlockStorageSourceAttachDataCommandline(cmd, - data->srcdata[i - 1]) < 0) + data->srcdata[i - 1], + flags) < 0) return -1; } @@ -9627,17 +9678,18 @@ qemuBuildPflashBlockdevOne(virCommandPtr cmd, static int qemuBuildPflashBlockdevCommandLine(virCommandPtr cmd, - qemuDomainObjPrivatePtr priv) + qemuDomainObjPrivatePtr priv, + unsigned int flags) { if (!virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_BLOCKDEV)) return 0; if (priv->pflash0 && - qemuBuildPflashBlockdevOne(cmd, priv->pflash0, priv->qemuCaps) < 0) + qemuBuildPflashBlockdevOne(cmd, priv->pflash0, priv->qemuCaps, flags) < 0) return -1; if (priv->pflash1 && - qemuBuildPflashBlockdevOne(cmd, priv->pflash1, priv->qemuCaps) < 0) + qemuBuildPflashBlockdevOne(cmd, priv->pflash1, priv->qemuCaps, flags) < 0) return -1; return 0; @@ -9665,7 +9717,8 @@ qemuBuildDBusVMStateInfoProps(virQEMUDriverPtr driver, static int qemuBuildDBusVMStateCommandLine(virCommandPtr cmd, virQEMUDriverPtr driver, - virDomainObjPtr vm) + virDomainObjPtr vm, + unsigned int flags) { g_auto(virBuffer) buf = VIR_BUFFER_INITIALIZER; g_autoptr(virJSONValue) props = NULL; @@ -9682,7 +9735,8 @@ qemuBuildDBusVMStateCommandLine(virCommandPtr cmd, if (!(props = qemuBuildDBusVMStateInfoProps(driver, vm))) return -1; - if (virQEMUBuildObjectCommandlineFromJSON(&buf, props) < 0) + if (virQEMUBuildObjectCommandlineFromJSON(&buf, props, + (flags & QEMU_BUILD_COMMANDLINE_VALIDATE_KEEP_JSON)) < 0) return -1; virCommandAddArg(cmd, "-object"); @@ -9926,16 +9980,16 @@ qemuBuildCommandLine(virQEMUDriverPtr driver, if (!standalone) virCommandAddArg(cmd, "-S"); /* freeze CPU */ - if (qemuBuildMasterKeyCommandLine(cmd, priv) < 0) + if (qemuBuildMasterKeyCommandLine(cmd, priv, flags) < 0) return NULL; - if (qemuBuildDBusVMStateCommandLine(cmd, driver, vm) < 0) + if (qemuBuildDBusVMStateCommandLine(cmd, driver, vm, flags) < 0) return NULL; - if (qemuBuildManagedPRCommandLine(cmd, def, priv) < 0) + if (qemuBuildManagedPRCommandLine(cmd, def, priv, flags) < 0) return NULL; - if (qemuBuildPflashBlockdevCommandLine(cmd, priv) < 0) + if (qemuBuildPflashBlockdevCommandLine(cmd, priv, flags) < 0) return NULL; if (enableFips) @@ -9951,20 +10005,20 @@ qemuBuildCommandLine(virQEMUDriverPtr driver, qemuBuildDomainLoaderCommandLine(cmd, def, qemuCaps); - if (qemuBuildMemCommandLine(cmd, def, qemuCaps, priv) < 0) + if (qemuBuildMemCommandLine(cmd, def, qemuCaps, priv, flags) < 0) return NULL; if (qemuBuildSmpCommandLine(cmd, def, qemuCaps) < 0) return NULL; - if (qemuBuildIOThreadCommandLine(cmd, def) < 0) + if (qemuBuildIOThreadCommandLine(cmd, def, flags) < 0) return NULL; if (virDomainNumaGetNodeCount(def->numa) && - qemuBuildNumaCommandLine(cfg, def, cmd, priv) < 0) + qemuBuildNumaCommandLine(cfg, def, cmd, priv, flags) < 0) return NULL; - if (qemuBuildMemoryDeviceCommandLine(cmd, cfg, def, priv) < 0) + if (qemuBuildMemoryDeviceCommandLine(cmd, cfg, def, priv, flags) < 0) return NULL; virUUIDFormat(def->uuid, uuid); @@ -10003,7 +10057,7 @@ qemuBuildCommandLine(virQEMUDriverPtr driver, if (qemuBuildSgaCommandLine(cmd, def) < 0) return NULL; - if (qemuBuildMonitorCommandLine(logManager, secManager, cmd, cfg, def, priv) < 0) + if (qemuBuildMonitorCommandLine(logManager, secManager, cmd, cfg, def, priv, flags) < 0) return NULL; if (qemuBuildClockCommandLine(cmd, def, qemuCaps) < 0) @@ -10031,7 +10085,7 @@ qemuBuildCommandLine(virQEMUDriverPtr driver, VIR_DOMAIN_CONTROLLER_TYPE_CCID) < 0) return NULL; - if (qemuBuildDisksCommandLine(cmd, def, qemuCaps) < 0) + if (qemuBuildDisksCommandLine(cmd, def, qemuCaps, flags) < 0) return NULL; if (qemuBuildFilesystemCommandLine(cmd, def, qemuCaps, priv) < 0) @@ -10043,15 +10097,15 @@ qemuBuildCommandLine(virQEMUDriverPtr driver, return NULL; if (qemuBuildSmartcardCommandLine(logManager, secManager, cmd, cfg, def, qemuCaps, - chardevStdioLogd) < 0) + chardevStdioLogd, flags) < 0) return NULL; if (qemuBuildSerialCommandLine(logManager, secManager, cmd, cfg, def, qemuCaps, - chardevStdioLogd) < 0) + chardevStdioLogd, flags) < 0) return NULL; if (qemuBuildParallelsCommandLine(logManager, secManager, cmd, cfg, def, qemuCaps, - chardevStdioLogd) < 0) + chardevStdioLogd, flags) < 0) return NULL; if (qemuBuildChannelsCommandLine(logManager, secManager, cmd, cfg, def, qemuCaps, @@ -10059,7 +10113,7 @@ qemuBuildCommandLine(virQEMUDriverPtr driver, return NULL; if (qemuBuildConsoleCommandLine(logManager, secManager, cmd, cfg, def, qemuCaps, - chardevStdioLogd) < 0) + chardevStdioLogd, flags) < 0) return NULL; if (qemuBuildTPMsCommandLine(cmd, def, qemuCaps) < 0) @@ -10068,7 +10122,7 @@ qemuBuildCommandLine(virQEMUDriverPtr driver, if (qemuBuildInputCommandLine(cmd, def, qemuCaps) < 0) return NULL; - if (qemuBuildGraphicsCommandLine(cfg, cmd, def, qemuCaps) < 0) + if (qemuBuildGraphicsCommandLine(cfg, cmd, def, qemuCaps, flags) < 0) return NULL; if (qemuBuildVideoCommandLine(cmd, def, qemuCaps) < 0) @@ -10081,10 +10135,10 @@ qemuBuildCommandLine(virQEMUDriverPtr driver, return NULL; if (qemuBuildRedirdevCommandLine(logManager, secManager, cmd, cfg, def, qemuCaps, - chardevStdioLogd) < 0) + chardevStdioLogd, flags) < 0) return NULL; - if (qemuBuildHostdevCommandLine(cmd, def, qemuCaps, &bootHostdevNet) < 0) + if (qemuBuildHostdevCommandLine(cmd, def, qemuCaps, &bootHostdevNet, flags) < 0) return NULL; if (migrateURI) @@ -10094,7 +10148,7 @@ qemuBuildCommandLine(virQEMUDriverPtr driver, return NULL; if (qemuBuildRNGCommandLine(logManager, secManager, cmd, cfg, def, qemuCaps, - chardevStdioLogd) < 0) + chardevStdioLogd, flags) < 0) return NULL; if (qemuBuildNVRAMCommandLine(cmd, def) < 0) @@ -10103,7 +10157,7 @@ qemuBuildCommandLine(virQEMUDriverPtr driver, if (qemuBuildVMCoreInfoCommandLine(cmd, def) < 0) return NULL; - if (qemuBuildSEVCommandLine(vm, cmd, def->sev) < 0) + if (qemuBuildSEVCommandLine(vm, cmd, def->sev, flags) < 0) return NULL; if (snapshot) @@ -10129,7 +10183,7 @@ qemuBuildCommandLine(virQEMUDriverPtr driver, for (i = 0; i < def->nshmems; i++) { if (qemuBuildShmemCommandLine(logManager, secManager, cmd, cfg, def, def->shmems[i], qemuCaps, - chardevStdioLogd)) + chardevStdioLogd, flags)) return NULL; } diff --git a/src/util/virqemu.c b/src/util/virqemu.c index 57ee42dd16..c420b144e1 100644 --- a/src/util/virqemu.c +++ b/src/util/virqemu.c @@ -329,14 +329,28 @@ virQEMUBuildObjectCommandlineFromJSONInternal(virBufferPtr buf, } +/** + * virQEMUBuildObjectCommandlineFromJSON: + * @buf: buffer to format output to + * @objprops: JSON object describing a qemu 'object' + * @rawjson: don't transform to commandline args, just stringify json + * + * Converts @objprops into arguments for -object. + * + * @rawjson is meant for testing of the schema in the xml2argvtest + */ int virQEMUBuildObjectCommandlineFromJSON(virBufferPtr buf, - virJSONValuePtr objprops) + virJSONValuePtr objprops, + bool rawjson) { const char *type = virJSONValueObjectGetString(objprops, "qom-type"); const char *alias = virJSONValueObjectGetString(objprops, "id"); virJSONValuePtr props = virJSONValueObjectGetObject(objprops, "props"); + if (rawjson) + return virJSONValueToBuffer(objprops, buf, false); + return virQEMUBuildObjectCommandlineFromJSONInternal(buf, type, alias, props); } diff --git a/src/util/virqemu.h b/src/util/virqemu.h index 849b7df0c2..890c83c628 100644 --- a/src/util/virqemu.h +++ b/src/util/virqemu.h @@ -49,7 +49,8 @@ virQEMUBuildNetdevCommandlineFromJSON(virJSONValuePtr props, bool rawjson); int virQEMUBuildObjectCommandlineFromJSON(virBufferPtr buf, - virJSONValuePtr objprops); + virJSONValuePtr objprops, + bool rawjson); char *virQEMUBuildDriveCommandlineFromJSON(virJSONValuePtr src); -- 2.29.2

Construct the JSON object which is used for object-add without the 'props' wrapper and add the wrapper only in the monitor code. This simplifies the JSON->commandline generator in the first place and also prepares for upcoming qemu where 'props' will be removed. Signed-off-by: Peter Krempa <pkrempa@redhat.com> --- src/qemu/qemu_monitor.c | 68 +++++++++++++++++++++++++++++------------ src/util/virqemu.c | 42 +++++++++---------------- 2 files changed, 62 insertions(+), 48 deletions(-) diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c index ed35da17e1..8b88c8f922 100644 --- a/src/qemu/qemu_monitor.c +++ b/src/qemu/qemu_monitor.c @@ -109,6 +109,9 @@ struct _qemuMonitor { qemuMonitorReportDomainLogError logFunc; void *logOpaque; virFreeCallback logDestroy; + + /* true if qemu no longer wants 'props' sub-object of object-add */ + bool objectAddNoWrap; }; /** @@ -3012,14 +3015,12 @@ qemuMonitorCreateObjectPropsWrap(const char *type, const char *alias, virJSONValuePtr *props) { - virJSONValuePtr ret; - ignore_value(virJSONValueObjectCreate(&ret, - "s:qom-type", type, - "s:id", alias, - "A:props", props, - NULL)); - return ret; + if (virJSONValueObjectPrependString(*props, "id", alias) < 0 || + virJSONValueObjectPrependString(*props, "qom-type", type)) + return NULL; + + return g_steal_pointer(props); } @@ -3039,26 +3040,28 @@ qemuMonitorCreateObjectProps(virJSONValuePtr *propsret, const char *alias, ...) { - virJSONValuePtr props = NULL; - int ret = -1; + g_autoptr(virJSONValue) props = NULL; + int rc; va_list args; - *propsret = NULL; + if (virJSONValueObjectCreate(&props, + "s:qom-type", type, + "s:id", alias, + NULL) < 0) + return -1; + va_start(args, alias); - if (virJSONValueObjectCreateVArgs(&props, args) < 0) - goto cleanup; + rc = virJSONValueObjectAddVArgs(props, args); - if (!(*propsret = qemuMonitorCreateObjectPropsWrap(type, alias, &props))) - goto cleanup; + va_end(args); - ret = 0; + if (rc < 0) + return -1; - cleanup: - virJSONValueFree(props); - va_end(args); - return ret; + *propsret = g_steal_pointer(&props); + return 0; } @@ -3078,6 +3081,7 @@ qemuMonitorAddObject(qemuMonitorPtr mon, virJSONValuePtr *props, char **alias) { + g_autoptr(virJSONValue) pr = NULL; const char *type = NULL; const char *id = NULL; g_autofree char *aliasCopy = NULL; @@ -3105,7 +3109,31 @@ qemuMonitorAddObject(qemuMonitorPtr mon, if (alias) aliasCopy = g_strdup(id); - if (qemuMonitorJSONAddObject(mon, props) < 0) + if (mon->objectAddNoWrap) { + pr = g_steal_pointer(props); + } else { + /* we need to create a wrapper which has the 'qom-type' and 'id' and + * store everything else under a 'props' sub-object */ + g_autoptr(virJSONValue) typeobj = NULL; + g_autoptr(virJSONValue) idobj = NULL; + + ignore_value(virJSONValueObjectRemoveKey(*props, "qom-type", &typeobj)); + ignore_value(virJSONValueObjectRemoveKey(*props, "id", &idobj)); + + if (!virJSONValueObjectGetKey(*props, 0)) { + virJSONValueFree(*props); + *props = NULL; + } + + if (virJSONValueObjectCreate(&pr, + "s:qom-type", type, + "s:id", id, + "A:props", props, + NULL) < 0) + return -1; + } + + if (qemuMonitorJSONAddObject(mon, &pr) < 0) return -1; if (alias) diff --git a/src/util/virqemu.c b/src/util/virqemu.c index c420b144e1..5fe142394c 100644 --- a/src/util/virqemu.c +++ b/src/util/virqemu.c @@ -303,32 +303,6 @@ virQEMUBuildNetdevCommandlineFromJSON(virJSONValuePtr props, } -static int -virQEMUBuildObjectCommandlineFromJSONInternal(virBufferPtr buf, - const char *type, - const char *alias, - virJSONValuePtr props) -{ - if (!type || !alias) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("missing 'type'(%s) or 'alias'(%s) field of QOM 'object'"), - NULLSTR(type), NULLSTR(alias)); - return -1; - } - - virBufferAsprintf(buf, "%s,id=%s", type, alias); - - if (props) { - virBufferAddLit(buf, ","); - if (virQEMUBuildCommandLineJSON(props, buf, NULL, - virQEMUBuildCommandLineJSONArrayBitmap) < 0) - return -1; - } - - return 0; -} - - /** * virQEMUBuildObjectCommandlineFromJSON: * @buf: buffer to format output to @@ -346,12 +320,24 @@ virQEMUBuildObjectCommandlineFromJSON(virBufferPtr buf, { const char *type = virJSONValueObjectGetString(objprops, "qom-type"); const char *alias = virJSONValueObjectGetString(objprops, "id"); - virJSONValuePtr props = virJSONValueObjectGetObject(objprops, "props"); + + if (!type || !alias) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("missing 'type'(%s) or 'alias'(%s) field of QOM 'object'"), + NULLSTR(type), NULLSTR(alias)); + return -1; + } if (rawjson) return virJSONValueToBuffer(objprops, buf, false); - return virQEMUBuildObjectCommandlineFromJSONInternal(buf, type, alias, props); + virBufferAsprintf(buf, "%s,", type); + + if (virQEMUBuildCommandLineJSON(objprops, buf, "qom-type", + virQEMUBuildCommandLineJSONArrayBitmap) < 0) + return -1; + + return 0; } -- 2.29.2

There's just one caller left. Since qemuBuildMemoryBackendProps is too complex to be modified for now, just move the adding of 'id' and 'qom' type directly into the function. Signed-off-by: Peter Krempa <pkrempa@redhat.com> --- src/qemu/qemu_command.c | 6 ++++-- src/qemu/qemu_monitor.c | 15 --------------- src/qemu/qemu_monitor.h | 4 ---- 3 files changed, 4 insertions(+), 21 deletions(-) diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index c4bb6a87bb..31b20a4f12 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -3284,10 +3284,12 @@ qemuBuildMemoryBackendProps(virJSONValuePtr *backendProps, rc = 0; } - if (!(*backendProps = qemuMonitorCreateObjectPropsWrap(backendType, alias, - &props))) + if (virJSONValueObjectPrependString(props, "id", alias) < 0 || + virJSONValueObjectPrependString(props, "qom-type", backendType) < 0) return -1; + *backendProps = g_steal_pointer(&props); + return rc; } diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c index 8b88c8f922..121c21be5c 100644 --- a/src/qemu/qemu_monitor.c +++ b/src/qemu/qemu_monitor.c @@ -3010,21 +3010,6 @@ qemuMonitorAddDeviceArgs(qemuMonitorPtr mon, } -virJSONValuePtr -qemuMonitorCreateObjectPropsWrap(const char *type, - const char *alias, - virJSONValuePtr *props) -{ - - if (virJSONValueObjectPrependString(*props, "id", alias) < 0 || - virJSONValueObjectPrependString(*props, "qom-type", type)) - return NULL; - - return g_steal_pointer(props); -} - - - /** * qemuMonitorCreateObjectProps: * @propsret: returns full object properties diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h index d25c26343a..c6ffd51ce8 100644 --- a/src/qemu/qemu_monitor.h +++ b/src/qemu/qemu_monitor.h @@ -1006,10 +1006,6 @@ int qemuMonitorAddDeviceWithFd(qemuMonitorPtr mon, int qemuMonitorDelDevice(qemuMonitorPtr mon, const char *devalias); -virJSONValuePtr qemuMonitorCreateObjectPropsWrap(const char *type, - const char *alias, - virJSONValuePtr *props); - int qemuMonitorCreateObjectProps(virJSONValuePtr *propsret, const char *type, const char *alias, -- 2.29.2

Set 'objectAddNoWrap' when the capability is present. Signed-off-by: Peter Krempa <pkrempa@redhat.com> --- src/qemu/qemu_monitor.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c index 121c21be5c..1e4c4809b1 100644 --- a/src/qemu/qemu_monitor.c +++ b/src/qemu/qemu_monitor.c @@ -32,6 +32,7 @@ #include "qemu_monitor_json.h" #include "qemu_domain.h" #include "qemu_process.h" +#include "qemu_capabilities.h" #include "virerror.h" #include "viralloc.h" #include "virlog.h" @@ -672,6 +673,7 @@ qemuMonitorOpenInternal(virDomainObjPtr vm, qemuMonitorCallbacksPtr cb, void *opaque) { + qemuDomainObjPrivatePtr priv = vm->privateData; qemuMonitorPtr mon; g_autoptr(GError) gerr = NULL; @@ -704,6 +706,9 @@ qemuMonitorOpenInternal(virDomainObjPtr vm, mon->cb = cb; mon->callbackOpaque = opaque; + if (priv) + mon->objectAddNoWrap = virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_OBJECT_QAPIFIED); + if (virSetCloseExec(mon->fd) < 0) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("Unable to set monitor close-on-exec flag")); -- 2.29.2

Libvirt is now prepared for QAPIfied object-add. Signed-off-by: Peter Krempa <pkrempa@redhat.com> --- tests/qemumonitorjsontest.c | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/tests/qemumonitorjsontest.c b/tests/qemumonitorjsontest.c index 82c74e2ef9..48b41c908a 100644 --- a/tests/qemumonitorjsontest.c +++ b/tests/qemumonitorjsontest.c @@ -2740,20 +2740,6 @@ testQAPISchemaObjectDeviceAdd(const void *opaque) return -1; } - if (virQEMUQAPISchemaPathGet("object-add/arg-type", schema, &entry) < 0) { - fprintf(stderr, "schema for 'objectadd' not found\n"); - return -1; - } - - if (testQEMUSchemaEntryMatchTemplate(entry, - "str:qom-type", - "str:id", - "any:props", - NULL) < 0) { - VIR_TEST_VERBOSE("object-add has unexpected members in schema"); - return -1; - } - return 0; } -- 2.29.2

qemu qapified object-add, which means that it's introspectable via query-qmp-schema. Update the qemu-6.0 capabilities to commit XXXXXXXXXX TODO: update to pushed version --- .../caps_6.0.0.x86_64.replies | 3238 ++++++++++++----- .../caps_6.0.0.x86_64.xml | 83 +- 2 files changed, 2471 insertions(+), 850 deletions(-) diff --git a/tests/qemucapabilitiesdata/caps_6.0.0.x86_64.replies b/tests/qemucapabilitiesdata/caps_6.0.0.x86_64.replies index 04ebd04583..d878522c75 100644 --- a/tests/qemucapabilitiesdata/caps_6.0.0.x86_64.replies +++ b/tests/qemucapabilitiesdata/caps_6.0.0.x86_64.replies @@ -21,7 +21,7 @@ "minor": 2, "major": 5 }, - "package": "v5.2.0-2208-gc79f01c945" + "package": "v5.2.0-2362-g25fa357a8e" }, "id": "libvirt-2" } @@ -45,9 +45,6 @@ { "return": [ - { - "name": "object-add" - }, { "name": "device_add" }, @@ -210,6 +207,9 @@ { "name": "object-del" }, + { + "name": "object-add" + }, { "name": "qom-list-properties" }, @@ -667,6 +667,10 @@ "name": "vhost-user-vsock-device", "parent": "vhost-vsock-common" }, + { + "name": "virtio-blk-pci-transitional", + "parent": "virtio-blk-pci-base" + }, { "name": "pcie-pci-bridge", "parent": "base-pci-bridge" @@ -675,6 +679,10 @@ "name": "pc-q35-2.11-machine", "parent": "generic-pc-machine" }, + { + "name": "virtio-crypto-device", + "parent": "virtio-device" + }, { "name": "isa-applesmc", "parent": "isa-device" @@ -692,35 +700,35 @@ "parent": "bus" }, { - "name": "virtio-crypto-device", - "parent": "virtio-device" + "name": "Denverton-x86_64-cpu", + "parent": "x86_64-cpu" }, { "name": "chardev-testdev", "parent": "chardev" }, { - "name": "Denverton-x86_64-cpu", - "parent": "x86_64-cpu" + "name": "usb-wacom-tablet", + "parent": "usb-device" }, { - "name": "pci-ipmi-bt", - "parent": "pci-device" + "name": "Icelake-Server-v1-x86_64-cpu", + "parent": "x86_64-cpu" }, { - "name": "sev-guest", - "parent": "confidential-guest-support" + "name": "chardev-stdio", + "parent": "chardev-fd" }, { - "name": "usb-redir", - "parent": "usb-device" + "name": "pci-ipmi-bt", + "parent": "pci-device" }, { "name": "filter-buffer", "parent": "netfilter" }, { - "name": "usb-wacom-tablet", + "name": "usb-redir", "parent": "usb-device" }, { @@ -732,8 +740,8 @@ "parent": "pci-vga" }, { - "name": "virtio-blk-pci-transitional", - "parent": "virtio-blk-pci-base" + "name": "kvm-pit", + "parent": "pit-common" }, { "name": "Haswell-v1-x86_64-cpu", @@ -756,8 +764,8 @@ "parent": "generic-pc-machine" }, { - "name": "kvm-pit", - "parent": "pit-common" + "name": "sev-guest", + "parent": "confidential-guest-support" }, { "name": "ich9-usb-uhci5", @@ -812,8 +820,8 @@ "parent": "usb-device" }, { - "name": "chardev-serial", - "parent": "chardev-fd" + "name": "chardev-pty", + "parent": "chardev" }, { "name": "virtio-blk-device", @@ -848,8 +856,8 @@ "parent": "generic-pc-machine" }, { - "name": "chardev-pty", - "parent": "chardev" + "name": "chardev-serial", + "parent": "chardev-fd" }, { "name": "qtest-accel", @@ -979,14 +987,14 @@ "name": "pci-ipmi-kcs", "parent": "pci-device" }, - { - "name": "intel-iommu-iommu-memory-region", - "parent": "qemu:iommu-memory-region" - }, { "name": "xio3130-downstream", "parent": "pcie-slot" }, + { + "name": "intel-iommu-iommu-memory-region", + "parent": "qemu:iommu-memory-region" + }, { "name": "vhost-user-vsock-pci-non-transitional", "parent": "vhost-user-vsock-pci-base" @@ -995,14 +1003,14 @@ "name": "pc-i440fx-2.3-machine", "parent": "generic-pc-machine" }, - { - "name": "PCI", - "parent": "bus" - }, { "name": "microvm-machine", "parent": "x86-machine" }, + { + "name": "PCI", + "parent": "bus" + }, { "name": "sdhci-bus", "parent": "sd-bus" @@ -1104,8 +1112,8 @@ "parent": "pci-device" }, { - "name": "virtio-input-host-pci", - "parent": "virtio-input-host-pci-base-type" + "name": "virtio-9p-pci-transitional", + "parent": "virtio-9p-pci-base" }, { "name": "nvdimm", @@ -1116,8 +1124,8 @@ "parent": "generic-pc-machine" }, { - "name": "virtio-9p-pci-transitional", - "parent": "virtio-9p-pci-base" + "name": "virtio-input-host-pci", + "parent": "virtio-input-host-pci-base-type" }, { "name": "Opteron_G1-x86_64-cpu", @@ -1180,21 +1188,21 @@ "parent": "vhost-user-scsi-pci-base" }, { - "name": "vmmouse", - "parent": "isa-device" + "name": "pc-q35-2.8-machine", + "parent": "generic-pc-machine" }, { "name": "chardev-udp", "parent": "chardev" }, - { - "name": "pc-q35-2.8-machine", - "parent": "generic-pc-machine" - }, { "name": "generic-sdhci", "parent": "sys-bus-device" }, + { + "name": "vmmouse", + "parent": "isa-device" + }, { "name": "virtio-scsi-pci-non-transitional", "parent": "virtio-scsi-pci-base" @@ -1284,16 +1292,16 @@ "parent": "vhost-scsi-common" }, { - "name": "sd-card", - "parent": "device" + "name": "usb-tablet", + "parent": "usb-hid" }, { "name": "sysbus-ahci", "parent": "sys-bus-device" }, { - "name": "usb-tablet", - "parent": "usb-hid" + "name": "sd-card", + "parent": "device" }, { "name": "pc-q35-4.0.1-machine", @@ -1311,14 +1319,14 @@ "name": "isabus-bridge", "parent": "sys-bus-device" }, - { - "name": "IvyBridge-v2-x86_64-cpu", - "parent": "x86_64-cpu" - }, { "name": "ne2k_pci", "parent": "pci-device" }, + { + "name": "IvyBridge-v2-x86_64-cpu", + "parent": "x86_64-cpu" + }, { "name": "usb-bus", "parent": "bus" @@ -1327,10 +1335,6 @@ "name": "ide-cd", "parent": "ide-device" }, - { - "name": "qemu:memory-region", - "parent": "object" - }, { "name": "tcg-accel", "parent": "accel" @@ -1339,14 +1343,18 @@ "name": "virtio-balloon-pci", "parent": "virtio-balloon-pci-base" }, - { - "name": "virtio-gpu-device", - "parent": "virtio-gpu-base" - }, { "name": "Cascadelake-Server-v2-x86_64-cpu", "parent": "x86_64-cpu" }, + { + "name": "qemu:memory-region", + "parent": "object" + }, + { + "name": "virtio-gpu-device", + "parent": "virtio-gpu-base" + }, { "name": "e1000", "parent": "e1000-base" @@ -1403,14 +1411,14 @@ "name": "pc-q35-6.0-machine", "parent": "generic-pc-machine" }, - { - "name": "mioe3680_pci", - "parent": "pci-device" - }, { "name": "vhost-user-backend", "parent": "object" }, + { + "name": "mioe3680_pci", + "parent": "pci-device" + }, { "name": "vmxnet3", "parent": "pci-device" @@ -1451,6 +1459,10 @@ "name": "virtio-serial-device", "parent": "virtio-device" }, + { + "name": "virtio-serial-pci", + "parent": "virtio-serial-pci-base" + }, { "name": "Denverton-v2-x86_64-cpu", "parent": "x86_64-cpu" @@ -1507,10 +1519,6 @@ "name": "vhost-user-blk-pci-non-transitional", "parent": "vhost-user-blk-pci-base" }, - { - "name": "virtio-rng-pci-non-transitional", - "parent": "virtio-rng-pci-base" - }, { "name": "cirrus-vga", "parent": "pci-device" @@ -1536,8 +1544,8 @@ "parent": "pcie-host-bridge" }, { - "name": "virtio-serial-pci", - "parent": "virtio-serial-pci-base" + "name": "virtio-rng-pci-non-transitional", + "parent": "virtio-rng-pci-base" }, { "name": "Skylake-Client-x86_64-cpu", @@ -1583,10 +1591,6 @@ "name": "virtio-serial-pci-non-transitional", "parent": "virtio-serial-pci-base" }, - { - "name": "ICH9 SMB", - "parent": "pci-device" - }, { "name": "qemu64-v1-x86_64-cpu", "parent": "x86_64-cpu" @@ -1595,6 +1599,10 @@ "name": "e1000-82545em", "parent": "e1000-base" }, + { + "name": "ICH9 SMB", + "parent": "pci-device" + }, { "name": "sdhci-pci", "parent": "pci-device" @@ -1687,14 +1695,14 @@ "name": "pci-ohci", "parent": "pci-device" }, - { - "name": "Haswell-x86_64-cpu", - "parent": "x86_64-cpu" - }, { "name": "virtio-tablet-device", "parent": "virtio-input-hid-device" }, + { + "name": "Haswell-x86_64-cpu", + "parent": "x86_64-cpu" + }, { "name": "ccid-card-passthru", "parent": "ccid-card" @@ -1940,20 +1948,20 @@ "parent": "virtio-iommu-device-base" }, { - "name": "vmcoreinfo", - "parent": "device" + "name": "chardev-braille", + "parent": "chardev" }, { "name": "Icelake-Client-v1-x86_64-cpu", "parent": "x86_64-cpu" }, { - "name": "tpci200", - "parent": "pci-device" + "name": "vmcoreinfo", + "parent": "device" }, { - "name": "chardev-braille", - "parent": "chardev" + "name": "tpci200", + "parent": "pci-device" }, { "name": "rocker", @@ -2028,7 +2036,7 @@ "parent": "device" }, { - "name": "Westmere-v2-x86_64-cpu", + "name": "Cascadelake-Server-noTSX-x86_64-cpu", "parent": "x86_64-cpu" }, { @@ -2039,10 +2047,6 @@ "name": "nvme-bus", "parent": "bus" }, - { - "name": "virtconsole", - "parent": "virtserialport" - }, { "name": "virtio-net-pci-non-transitional", "parent": "virtio-net-pci-base" @@ -2052,16 +2056,16 @@ "parent": "isa-device" }, { - "name": "virtio-iommu-pci-non-transitional", - "parent": "virtio-iommu-device-base" + "name": "hyperv-testdev", + "parent": "isa-device" }, { "name": "scsi-hd", "parent": "scsi-disk-base" }, { - "name": "Cascadelake-Server-noTSX-x86_64-cpu", - "parent": "x86_64-cpu" + "name": "tpm-tis", + "parent": "isa-device" }, { "name": "usb-kbd", @@ -2104,8 +2108,12 @@ "parent": "x86_64-cpu" }, { - "name": "hyperv-testdev", - "parent": "isa-device" + "name": "lsi53c810", + "parent": "lsi53c895a" + }, + { + "name": "virtio-iommu-pci-non-transitional", + "parent": "virtio-iommu-device-base" }, { "name": "s3c-sdhci", @@ -2124,8 +2132,8 @@ "parent": "generic-pc-machine" }, { - "name": "tpm-tis", - "parent": "isa-device" + "name": "Westmere-v2-x86_64-cpu", + "parent": "x86_64-cpu" }, { "name": "pc-q35-5.1-machine", @@ -2140,8 +2148,8 @@ "parent": "virtio-input-hid-device" }, { - "name": "lsi53c810", - "parent": "lsi53c895a" + "name": "virtconsole", + "parent": "virtserialport" }, { "name": "ioh3420", @@ -2331,6 +2339,10 @@ "name": "Broadwell-v1-x86_64-cpu", "parent": "x86_64-cpu" }, + { + "name": "EPYC-Milan-v1-x86_64-cpu", + "parent": "x86_64-cpu" + }, { "name": "KnightsMill-v1-x86_64-cpu", "parent": "x86_64-cpu" @@ -2575,25 +2587,25 @@ "name": "Cascadelake-Server-v3-x86_64-cpu", "parent": "x86_64-cpu" }, + { + "name": "Nehalem-IBRS-x86_64-cpu", + "parent": "x86_64-cpu" + }, { "name": "cfi.pflash01", "parent": "sys-bus-device" }, { - "name": "isa-parallel", - "parent": "isa-device" + "name": "Skylake-Server-x86_64-cpu", + "parent": "x86_64-cpu" }, { "name": "pc-q35-2.7-machine", "parent": "generic-pc-machine" }, { - "name": "Skylake-Server-x86_64-cpu", - "parent": "x86_64-cpu" - }, - { - "name": "Nehalem-IBRS-x86_64-cpu", - "parent": "x86_64-cpu" + "name": "isa-parallel", + "parent": "isa-device" }, { "name": "pentium2-v1-x86_64-cpu", @@ -2663,14 +2675,14 @@ "name": "i82558a", "parent": "pci-device" }, - { - "name": "loader", - "parent": "device" - }, { "name": "usb-serial", "parent": "usb-serial-dev" }, + { + "name": "loader", + "parent": "device" + }, { "name": "pvscsi", "parent": "pci-device" @@ -2703,6 +2715,10 @@ "name": "dc390", "parent": "am53c974" }, + { + "name": "EPYC-Milan-x86_64-cpu", + "parent": "x86_64-cpu" + }, { "name": "i6300esb", "parent": "pci-device" @@ -2812,8 +2828,8 @@ "parent": "x86_64-cpu" }, { - "name": "pcie-root-port", - "parent": "pcie-root-port-base" + "name": "kvm64-v1-x86_64-cpu", + "parent": "x86_64-cpu" }, { "name": "IDE", @@ -2824,8 +2840,8 @@ "parent": "x86_64-cpu" }, { - "name": "kvm64-v1-x86_64-cpu", - "parent": "x86_64-cpu" + "name": "pcie-root-port", + "parent": "pcie-root-port-base" }, { "name": "mptsas1068", @@ -2923,18 +2939,10 @@ "name": "qio-channel-tls", "parent": "qio-channel" }, - { - "name": "chardev-stdio", - "parent": "chardev-fd" - }, { "name": "virtio-vga", "parent": "virtio-vga-base-type" }, - { - "name": "Icelake-Server-v1-x86_64-cpu", - "parent": "x86_64-cpu" - }, { "name": "authz-pam", "parent": "authz" @@ -7595,6 +7603,10 @@ "name": "cr8legacy", "type": "bool" }, + { + "name": "vmx-invept-single-context-noglobals", + "type": "bool" + }, { "name": "vmx-zero-len-inject", "type": "bool" @@ -7628,7 +7640,7 @@ "type": "bool" }, { - "name": "vmx-invept-single-context-noglobals", + "name": "ibrs", "type": "bool" }, { @@ -8307,23 +8319,23 @@ "type": "bool" }, { - "name": "vmx-wbinvd-exit", + "name": "vmx-exit-load-perf-global-ctrl", "type": "bool" }, { - "name": "vmx-exit-load-perf-global-ctrl", + "name": "xgetbv1", "type": "bool" }, { - "name": "3dnow", + "name": "vmx-wbinvd-exit", "type": "bool" }, { - "name": "la57", + "name": "3dnow", "type": "bool" }, { - "name": "xgetbv1", + "name": "kvm-asyncpf-int", "type": "bool" }, { @@ -8331,7 +8343,7 @@ "type": "bool" }, { - "name": "kvm-asyncpf-int", + "name": "la57", "type": "bool" }, { @@ -10392,6 +10404,39 @@ "migration-safe": true, "deprecated": false }, + { + "name": "EPYC-Milan-v1", + "typename": "EPYC-Milan-v1-x86_64-cpu", + "unavailable-features": [ + "pcid", + "erms", + "invpcid", + "pku", + "fsrm", + "ibrs", + "pku" + ], + "static": false, + "migration-safe": true, + "deprecated": false + }, + { + "name": "EPYC-Milan", + "typename": "EPYC-Milan-x86_64-cpu", + "unavailable-features": [ + "pcid", + "erms", + "invpcid", + "pku", + "fsrm", + "ibrs", + "pku" + ], + "alias-of": "EPYC-Milan-v1", + "static": false, + "migration-safe": true, + "deprecated": false + }, { "name": "EPYC-IBPB", "typename": "EPYC-IBPB-x86_64-cpu", @@ -10908,6 +10953,31 @@ ], "option": "iscsi" }, + { + "parameters": [ + { + "name": "resourcecontrol", + "type": "string" + }, + { + "name": "spawn", + "type": "string" + }, + { + "name": "elevateprivileges", + "type": "string" + }, + { + "name": "obsolete", + "type": "string" + }, + { + "name": "enable", + "type": "boolean" + } + ], + "option": "sandbox" + }, { "parameters": [ ], @@ -11105,27 +11175,95 @@ { "parameters": [ { - "name": "resourcecontrol", - "type": "string" + "name": "power-control", + "type": "boolean" }, { - "name": "spawn", + "name": "audiodev", "type": "string" }, { - "name": "elevateprivileges", + "name": "non-adaptive", + "type": "boolean" + }, + { + "name": "lossy", + "type": "boolean" + }, + { + "name": "sasl-authz", "type": "string" }, { - "name": "obsolete", + "name": "tls-authz", "type": "string" }, { - "name": "enable", + "name": "acl", + "type": "boolean" + }, + { + "name": "sasl", + "type": "boolean" + }, + { + "name": "key-delay-ms", + "type": "number" + }, + { + "name": "lock-key-sync", + "type": "boolean" + }, + { + "name": "reverse", + "type": "boolean" + }, + { + "name": "password", "type": "boolean" + }, + { + "name": "ipv6", + "type": "boolean" + }, + { + "name": "ipv4", + "type": "boolean" + }, + { + "name": "to", + "type": "number" + }, + { + "name": "connections", + "type": "number" + }, + { + "name": "head", + "type": "number" + }, + { + "name": "display", + "type": "string" + }, + { + "name": "share", + "type": "string" + }, + { + "name": "tls-creds", + "type": "string" + }, + { + "name": "websocket", + "type": "string" + }, + { + "name": "vnc", + "type": "string" } ], - "option": "sandbox" + "option": "vnc" }, { "parameters": [ @@ -11261,99 +11399,6 @@ ], "option": "spice" }, - { - "parameters": [ - { - "name": "power-control", - "type": "boolean" - }, - { - "name": "audiodev", - "type": "string" - }, - { - "name": "non-adaptive", - "type": "boolean" - }, - { - "name": "lossy", - "type": "boolean" - }, - { - "name": "sasl-authz", - "type": "string" - }, - { - "name": "tls-authz", - "type": "string" - }, - { - "name": "acl", - "type": "boolean" - }, - { - "name": "sasl", - "type": "boolean" - }, - { - "name": "key-delay-ms", - "type": "number" - }, - { - "name": "lock-key-sync", - "type": "boolean" - }, - { - "name": "reverse", - "type": "boolean" - }, - { - "name": "password", - "type": "boolean" - }, - { - "name": "ipv6", - "type": "boolean" - }, - { - "name": "ipv4", - "type": "boolean" - }, - { - "name": "to", - "type": "number" - }, - { - "name": "connections", - "type": "number" - }, - { - "name": "head", - "type": "number" - }, - { - "name": "display", - "type": "string" - }, - { - "name": "share", - "type": "string" - }, - { - "name": "tls-creds", - "type": "string" - }, - { - "name": "websocket", - "type": "string" - }, - { - "name": "vnc", - "type": "string" - } - ], - "option": "vnc" - }, { "parameters": [ { @@ -18367,32 +18412,174 @@ }, { "name": "180", - "members": [ + "tag": "qom-type", + "variants": [ { - "name": "qom-type", - "type": "str" + "case": "authz-list", + "type": "382" }, { - "name": "id", - "type": "str" + "case": "authz-listfile", + "type": "383" }, { - "name": "props", - "default": null, - "type": "any" - } - ], - "meta-type": "object" - }, - { - "name": "181", - "members": [ + "case": "authz-pam", + "type": "384" + }, { - "name": "id", - "type": "str" - } - ], - "meta-type": "object" + "case": "authz-simple", + "type": "385" + }, + { + "case": "can-host-socketcan", + "type": "386" + }, + { + "case": "colo-compare", + "type": "387" + }, + { + "case": "cryptodev-backend", + "type": "388" + }, + { + "case": "cryptodev-backend-builtin", + "type": "388" + }, + { + "case": "cryptodev-vhost-user", + "type": "389" + }, + { + "case": "dbus-vmstate", + "type": "390" + }, + { + "case": "filter-buffer", + "type": "391" + }, + { + "case": "filter-dump", + "type": "392" + }, + { + "case": "filter-mirror", + "type": "393" + }, + { + "case": "filter-redirector", + "type": "394" + }, + { + "case": "filter-replay", + "type": "395" + }, + { + "case": "filter-rewriter", + "type": "396" + }, + { + "case": "input-barrier", + "type": "397" + }, + { + "case": "input-linux", + "type": "398" + }, + { + "case": "iothread", + "type": "399" + }, + { + "case": "memory-backend-file", + "type": "400" + }, + { + "case": "memory-backend-memfd", + "type": "401" + }, + { + "case": "memory-backend-ram", + "type": "402" + }, + { + "case": "pr-manager-helper", + "type": "403" + }, + { + "case": "rng-builtin", + "type": "404" + }, + { + "case": "rng-egd", + "type": "405" + }, + { + "case": "rng-random", + "type": "406" + }, + { + "case": "secret", + "type": "407" + }, + { + "case": "secret_keyring", + "type": "408" + }, + { + "case": "throttle-group", + "type": "410" + }, + { + "case": "tls-creds-anon", + "type": "411" + }, + { + "case": "tls-creds-psk", + "type": "412" + }, + { + "case": "tls-creds-x509", + "type": "413" + }, + { + "case": "tls-cipher-suites", + "type": "414" + }, + { + "case": "x-remote-object", + "type": "415" + }, + { + "case": "can-bus", + "type": "0" + }, + { + "case": "s390-pv-guest", + "type": "0" + } + ], + "members": [ + { + "name": "qom-type", + "type": "381" + }, + { + "name": "id", + "type": "str" + } + ], + "meta-type": "object" + }, + { + "name": "181", + "members": [ + { + "name": "id", + "type": "str" + } + ], + "meta-type": "object" }, { "name": "182", @@ -18460,31 +18647,31 @@ "variants": [ { "case": "x86", - "type": "383" + "type": "418" }, { "case": "sparc", - "type": "384" + "type": "419" }, { "case": "ppc", - "type": "385" + "type": "420" }, { "case": "mips", - "type": "386" + "type": "421" }, { "case": "tricore", - "type": "387" + "type": "422" }, { "case": "s390", - "type": "388" + "type": "423" }, { "case": "riscv", - "type": "389" + "type": "424" }, { "case": "other", @@ -18515,11 +18702,11 @@ { "name": "props", "default": null, - "type": "381" + "type": "416" }, { "name": "arch", - "type": "382" + "type": "417" } ], "meta-type": "object" @@ -18535,7 +18722,7 @@ "variants": [ { "case": "s390x", - "type": "388" + "type": "423" }, { "case": "aarch64", @@ -18682,18 +18869,18 @@ { "name": "props", "default": null, - "type": "381" + "type": "416" }, { "name": "arch", - "type": "382", + "type": "417", "features": [ "deprecated" ] }, { "name": "target", - "type": "390" + "type": "425" } ], "meta-type": "object" @@ -18764,7 +18951,7 @@ "members": [ { "name": "arch", - "type": "390" + "type": "425" } ], "meta-type": "object" @@ -18879,7 +19066,7 @@ }, { "name": "policy", - "type": "391" + "type": "426" } ], "meta-type": "object" @@ -18902,7 +19089,7 @@ }, { "name": "props", - "type": "381" + "type": "416" }, { "name": "qom-path", @@ -18918,29 +19105,29 @@ "variants": [ { "case": "node", - "type": "393" + "type": "428" }, { "case": "dist", - "type": "394" + "type": "429" }, { "case": "cpu", - "type": "395" + "type": "430" }, { "case": "hmat-lb", - "type": "396" + "type": "431" }, { "case": "hmat-cache", - "type": "397" + "type": "432" } ], "members": [ { "name": "type", - "type": "392" + "type": "427" } ], "meta-type": "object" @@ -19001,25 +19188,25 @@ "variants": [ { "case": "dimm", - "type": "399" + "type": "434" }, { "case": "nvdimm", - "type": "399" + "type": "434" }, { "case": "virtio-pmem", - "type": "400" + "type": "435" }, { "case": "virtio-mem", - "type": "401" + "type": "436" } ], "members": [ { "name": "type", - "type": "398" + "type": "433" } ], "meta-type": "object" @@ -19058,11 +19245,11 @@ "members": [ { "name": "type", - "type": "404" + "type": "439" }, { "name": "model", - "type": "402" + "type": "437" } ], "meta-type": "object" @@ -19072,7 +19259,7 @@ "members": [ { "name": "model", - "type": "402" + "type": "437" } ], "meta-type": "object" @@ -19124,7 +19311,7 @@ "members": [ { "name": "mode", - "type": "405" + "type": "440" }, { "name": "filename", @@ -19179,11 +19366,11 @@ "variants": [ { "case": "block-node", - "type": "407" + "type": "442" }, { "case": "chardev", - "type": "408" + "type": "443" }, { "case": "migration", @@ -19193,7 +19380,7 @@ "members": [ { "name": "type", - "type": "406" + "type": "441" } ], "meta-type": "object" @@ -19358,7 +19545,7 @@ }, { "name": "fds", - "type": "[409]" + "type": "[444]" } ], "meta-type": "object" @@ -19388,7 +19575,7 @@ }, { "name": "parameters", - "type": "[410]" + "type": "[445]" } ], "meta-type": "object" @@ -19428,7 +19615,7 @@ }, { "name": "state", - "type": "411" + "type": "446" }, { "name": "handle", @@ -19507,7 +19694,7 @@ }, { "name": "slot-type", - "type": "412" + "type": "447" }, { "name": "source", @@ -19544,7 +19731,7 @@ }, { "name": "devices", - "type": "[413]" + "type": "[448]" } ], "meta-type": "object" @@ -19645,17 +19832,17 @@ "variants": [ { "case": "hyper-v", - "type": "415" + "type": "450" }, { "case": "s390", - "type": "416" + "type": "451" } ], "members": [ { "name": "type", - "type": "414" + "type": "449" } ], "meta-type": "object" @@ -19746,7 +19933,7 @@ }, { "name": "status", - "type": "417", + "type": "452", "features": [ "deprecated" ] @@ -19873,22 +20060,22 @@ }, { "name": "timed_stats", - "type": "[418]" + "type": "[453]" }, { "name": "rd_latency_histogram", "default": null, - "type": "419" + "type": "454" }, { "name": "wr_latency_histogram", "default": null, - "type": "419" + "type": "454" }, { "name": "flush_latency_histogram", "default": null, - "type": "419" + "type": "454" } ], "meta-type": "object" @@ -19899,15 +20086,15 @@ "variants": [ { "case": "file", - "type": "420" + "type": "455" }, { "case": "host_device", - "type": "420" + "type": "455" }, { "case": "nvme", - "type": "421" + "type": "456" }, { "case": "blkdebug", @@ -20224,7 +20411,7 @@ { "name": "format-specific", "default": null, - "type": "422" + "type": "457" } ], "meta-type": "object" @@ -20261,7 +20448,7 @@ }, { "name": "type", - "type": "423" + "type": "458" }, { "name": "name", @@ -20292,11 +20479,11 @@ }, { "name": "perm", - "type": "[424]" + "type": "[459]" }, { "name": "shared-perm", - "type": "[424]" + "type": "[459]" } ], "meta-type": "object" @@ -20402,7 +20589,7 @@ "members": [ { "name": "image", - "type": "425" + "type": "460" }, { "name": "config", @@ -20442,22 +20629,22 @@ { "name": "inject-error", "default": null, - "type": "[426]" + "type": "[461]" }, { "name": "set-state", "default": null, - "type": "[427]" + "type": "[462]" }, { "name": "take-child-perms", "default": null, - "type": "[424]" + "type": "[459]" }, { "name": "unshare-child-perms", "default": null, - "type": "[424]" + "type": "[459]" } ], "meta-type": "object" @@ -20467,11 +20654,11 @@ "members": [ { "name": "file", - "type": "425" + "type": "460" }, { "name": "log", - "type": "425" + "type": "460" }, { "name": "log-sector-size", @@ -20496,11 +20683,11 @@ "members": [ { "name": "test", - "type": "425" + "type": "460" }, { "name": "raw", - "type": "425" + "type": "460" } ], "meta-type": "object" @@ -20510,7 +20697,7 @@ "members": [ { "name": "image", - "type": "425" + "type": "460" } ], "meta-type": "object" @@ -20520,7 +20707,7 @@ "members": [ { "name": "file", - "type": "425" + "type": "460" } ], "meta-type": "object" @@ -20530,7 +20717,7 @@ "members": [ { "name": "file", - "type": "425" + "type": "460" }, { "name": "bottom", @@ -20555,12 +20742,12 @@ { "name": "locking", "default": null, - "type": "428" + "type": "463" }, { "name": "aio", "default": null, - "type": "429" + "type": "464" }, { "name": "drop-cache", @@ -20801,7 +20988,7 @@ "members": [ { "name": "transport", - "type": "430" + "type": "465" }, { "name": "portal", @@ -20834,7 +21021,7 @@ { "name": "header-digest", "default": null, - "type": "431" + "type": "466" }, { "name": "timeout", @@ -20849,7 +21036,7 @@ "members": [ { "name": "file", - "type": "425" + "type": "460" }, { "name": "key-secret", @@ -20894,7 +21081,7 @@ "members": [ { "name": "server", - "type": "432" + "type": "467" }, { "name": "path", @@ -20973,7 +21160,7 @@ "members": [ { "name": "file", - "type": "425" + "type": "460" }, { "name": "prealloc-align", @@ -20993,12 +21180,12 @@ "members": [ { "name": "file", - "type": "425" + "type": "460" }, { "name": "backing", "default": null, - "type": "433" + "type": "468" }, { "name": "lazy-refcounts", @@ -21023,7 +21210,7 @@ { "name": "overlap-check", "default": null, - "type": "434" + "type": "469" }, { "name": "cache-size", @@ -21053,12 +21240,12 @@ { "name": "encrypt", "default": null, - "type": "435" + "type": "470" }, { "name": "data-file", "default": null, - "type": "425" + "type": "460" } ], "meta-type": "object" @@ -21068,17 +21255,17 @@ "members": [ { "name": "file", - "type": "425" + "type": "460" }, { "name": "backing", "default": null, - "type": "433" + "type": "468" }, { "name": "encrypt", "default": null, - "type": "436" + "type": "471" } ], "meta-type": "object" @@ -21088,12 +21275,12 @@ "members": [ { "name": "file", - "type": "425" + "type": "460" }, { "name": "backing", "default": null, - "type": "433" + "type": "468" } ], "meta-type": "object" @@ -21108,7 +21295,7 @@ }, { "name": "children", - "type": "[425]" + "type": "[460]" }, { "name": "vote-threshold", @@ -21122,7 +21309,7 @@ { "name": "read-pattern", "default": null, - "type": "437" + "type": "472" } ], "meta-type": "object" @@ -21132,7 +21319,7 @@ "members": [ { "name": "file", - "type": "425" + "type": "460" }, { "name": "offset", @@ -21181,7 +21368,7 @@ { "name": "auth-client-required", "default": null, - "type": "[438]" + "type": "[473]" }, { "name": "key-secret", @@ -21191,7 +21378,7 @@ { "name": "server", "default": null, - "type": "[439]" + "type": "[474]" } ], "meta-type": "object" @@ -21201,11 +21388,11 @@ "members": [ { "name": "file", - "type": "425" + "type": "460" }, { "name": "mode", - "type": "440" + "type": "475" }, { "name": "top-id", @@ -21244,7 +21431,7 @@ "members": [ { "name": "server", - "type": "441" + "type": "476" }, { "name": "path", @@ -21258,7 +21445,7 @@ { "name": "host-key-check", "default": null, - "type": "442" + "type": "477" } ], "meta-type": "object" @@ -21272,7 +21459,7 @@ }, { "name": "file", - "type": "425" + "type": "460" } ], "meta-type": "object" @@ -21313,63 +21500,63 @@ "variants": [ { "case": "file", - "type": "443" + "type": "478" }, { "case": "gluster", - "type": "444" + "type": "479" }, { "case": "luks", - "type": "445" + "type": "480" }, { "case": "nfs", - "type": "446" + "type": "481" }, { "case": "parallels", - "type": "447" + "type": "482" }, { "case": "qcow", - "type": "448" + "type": "483" }, { "case": "qcow2", - "type": "449" + "type": "484" }, { "case": "qed", - "type": "450" + "type": "485" }, { "case": "rbd", - "type": "451" + "type": "486" }, { "case": "sheepdog", - "type": "452" + "type": "487" }, { "case": "ssh", - "type": "453" + "type": "488" }, { "case": "vdi", - "type": "454" + "type": "489" }, { "case": "vhdx", - "type": "455" + "type": "490" }, { "case": "vmdk", - "type": "456" + "type": "491" }, { "case": "vpc", - "type": "457" + "type": "492" }, { "case": "blkdebug", @@ -21490,11 +21677,11 @@ "variants": [ { "case": "luks", - "type": "458" + "type": "493" }, { "case": "qcow2", - "type": "459" + "type": "494" }, { "case": "blkdebug", @@ -21720,25 +21907,25 @@ "variants": [ { "case": "inet", - "type": "461" + "type": "496" }, { "case": "unix", - "type": "462" + "type": "497" }, { "case": "vsock", - "type": "463" + "type": "498" }, { "case": "fd", - "type": "464" + "type": "499" } ], "members": [ { "name": "type", - "type": "460" + "type": "495" } ], "meta-type": "object" @@ -21819,89 +22006,89 @@ "variants": [ { "case": "file", - "type": "466" + "type": "501" }, { "case": "serial", - "type": "467" + "type": "502" }, { "case": "parallel", - "type": "467" + "type": "502" }, { "case": "pipe", - "type": "467" + "type": "502" }, { "case": "socket", - "type": "468" + "type": "503" }, { "case": "udp", - "type": "469" + "type": "504" }, { "case": "pty", - "type": "470" + "type": "505" }, { "case": "null", - "type": "470" + "type": "505" }, { "case": "mux", - "type": "471" + "type": "506" }, { "case": "msmouse", - "type": "470" + "type": "505" }, { "case": "wctablet", - "type": "470" + "type": "505" }, { "case": "braille", - "type": "470" + "type": "505" }, { "case": "testdev", - "type": "470" + "type": "505" }, { "case": "stdio", - "type": "472" + "type": "507" }, { "case": "console", - "type": "470" + "type": "505" }, { "case": "spicevmc", - "type": "473" + "type": "508" }, { "case": "spiceport", - "type": "474" + "type": "509" }, { "case": "vc", - "type": "475" + "type": "510" }, { "case": "ringbuf", - "type": "476" + "type": "511" }, { "case": "memory", - "type": "476" + "type": "511" } ], "members": [ { "name": "type", - "type": "465" + "type": "500" } ], "meta-type": "object" @@ -22042,7 +22229,7 @@ { "name": "dnssearch", "default": null, - "type": "[477]" + "type": "[512]" }, { "name": "domainname", @@ -22082,12 +22269,12 @@ { "name": "hostfwd", "default": null, - "type": "[477]" + "type": "[512]" }, { "name": "guestfwd", "default": null, - "type": "[477]" + "type": "[512]" }, { "name": "tftp-server-name", @@ -22567,17 +22754,17 @@ "variants": [ { "case": "passthrough", - "type": "479" + "type": "514" }, { "case": "emulator", - "type": "480" + "type": "515" } ], "members": [ { "name": "type", - "type": "478" + "type": "513" } ], "meta-type": "object" @@ -22845,17 +23032,17 @@ "variants": [ { "case": "number", - "type": "482" + "type": "517" }, { "case": "qcode", - "type": "483" + "type": "518" } ], "members": [ { "name": "type", - "type": "481" + "type": "516" } ], "meta-type": "object" @@ -22871,25 +23058,25 @@ "variants": [ { "case": "key", - "type": "485" + "type": "520" }, { "case": "btn", - "type": "486" + "type": "521" }, { "case": "rel", - "type": "487" + "type": "522" }, { "case": "abs", - "type": "487" + "type": "522" } ], "members": [ { "name": "type", - "type": "484" + "type": "519" } ], "meta-type": "object" @@ -23119,25 +23306,25 @@ "variants": [ { "case": "inet", - "type": "441" + "type": "476" }, { "case": "unix", - "type": "489" + "type": "524" }, { "case": "vsock", - "type": "490" + "type": "525" }, { "case": "fd", - "type": "477" + "type": "512" } ], "members": [ { "name": "type", - "type": "488" + "type": "523" } ], "meta-type": "object" @@ -23193,7 +23380,7 @@ }, { "name": "bitmaps", - "type": "[491]" + "type": "[526]" } ], "meta-type": "object" @@ -23242,57 +23429,57 @@ "variants": [ { "case": "abort", - "type": "493" + "type": "528" }, { "case": "block-dirty-bitmap-add", - "type": "494" + "type": "529" }, { "case": "block-dirty-bitmap-remove", - "type": "495" + "type": "530" }, { "case": "block-dirty-bitmap-clear", - "type": "495" + "type": "530" }, { "case": "block-dirty-bitmap-enable", - "type": "495" + "type": "530" }, { "case": "block-dirty-bitmap-disable", - "type": "495" + "type": "530" }, { "case": "block-dirty-bitmap-merge", - "type": "496" + "type": "531" }, { "case": "blockdev-backup", - "type": "497" + "type": "532" }, { "case": "blockdev-snapshot", - "type": "498" + "type": "533" }, { "case": "blockdev-snapshot-internal-sync", - "type": "499" + "type": "534" }, { "case": "blockdev-snapshot-sync", - "type": "500" + "type": "535" }, { "case": "drive-backup", - "type": "501" + "type": "536" } ], "members": [ { "name": "type", - "type": "492" + "type": "527" } ], "meta-type": "object" @@ -23303,7 +23490,7 @@ { "name": "completion-mode", "default": null, - "type": "502" + "type": "537" } ], "meta-type": "object" @@ -23365,7 +23552,7 @@ "members": [ { "name": "json-type", - "type": "503" + "type": "538" } ], "meta-type": "object" @@ -23395,7 +23582,7 @@ "members": [ { "name": "members", - "type": "[504]" + "type": "[539]" }, { "name": "tag", @@ -23405,7 +23592,7 @@ { "name": "variants", "default": null, - "type": "[505]" + "type": "[540]" } ], "meta-type": "object" @@ -23415,7 +23602,7 @@ "members": [ { "name": "members", - "type": "[506]" + "type": "[541]" } ], "meta-type": "object" @@ -23451,55 +23638,73 @@ }, { "name": "381", + "meta-type": "enum", + "values": [ + "authz-list", + "authz-listfile", + "authz-pam", + "authz-simple", + "can-bus", + "can-host-socketcan", + "colo-compare", + "cryptodev-backend", + "cryptodev-backend-builtin", + "cryptodev-vhost-user", + "dbus-vmstate", + "filter-buffer", + "filter-dump", + "filter-mirror", + "filter-redirector", + "filter-replay", + "filter-rewriter", + "input-barrier", + "input-linux", + "iothread", + "memory-backend-file", + "memory-backend-memfd", + "memory-backend-ram", + "pr-manager-helper", + "rng-builtin", + "rng-egd", + "rng-random", + "secret", + "secret_keyring", + "s390-pv-guest", + "throttle-group", + "tls-creds-anon", + "tls-creds-psk", + "tls-creds-x509", + "tls-cipher-suites", + "x-remote-object" + ] + }, + { + "name": "382", "members": [ { - "name": "node-id", - "default": null, - "type": "int" - }, - { - "name": "socket-id", - "default": null, - "type": "int" - }, - { - "name": "die-id", - "default": null, - "type": "int" - }, - { - "name": "core-id", + "name": "policy", "default": null, - "type": "int" + "type": "542" }, { - "name": "thread-id", + "name": "rules", "default": null, - "type": "int" + "type": "[543]" } ], "meta-type": "object" }, - { - "name": "382", - "meta-type": "enum", - "values": [ - "x86", - "sparc", - "ppc", - "mips", - "tricore", - "s390", - "riscv", - "other" - ] - }, { "name": "383", "members": [ { - "name": "pc", - "type": "int" + "name": "filename", + "type": "str" + }, + { + "name": "refresh", + "default": null, + "type": "bool" } ], "meta-type": "object" @@ -23508,12 +23713,8 @@ "name": "384", "members": [ { - "name": "pc", - "type": "int" - }, - { - "name": "npc", - "type": "int" + "name": "service", + "type": "str" } ], "meta-type": "object" @@ -23522,8 +23723,8 @@ "name": "385", "members": [ { - "name": "nip", - "type": "int" + "name": "identity", + "type": "str" } ], "meta-type": "object" @@ -23532,8 +23733,12 @@ "name": "386", "members": [ { - "name": "PC", - "type": "int" + "name": "if", + "type": "str" + }, + { + "name": "canbus", + "type": "str" } ], "meta-type": "object" @@ -23542,8 +23747,45 @@ "name": "387", "members": [ { - "name": "PC", + "name": "primary_in", + "type": "str" + }, + { + "name": "secondary_in", + "type": "str" + }, + { + "name": "outdev", + "type": "str" + }, + { + "name": "iothread", + "type": "str" + }, + { + "name": "notify_dev", + "default": null, + "type": "str" + }, + { + "name": "compare_timeout", + "default": null, + "type": "int" + }, + { + "name": "expired_scan_cycle", + "default": null, + "type": "int" + }, + { + "name": "max_queue_size", + "default": null, "type": "int" + }, + { + "name": "vnet_hdr_support", + "default": null, + "type": "bool" } ], "meta-type": "object" @@ -23552,8 +23794,9 @@ "name": "388", "members": [ { - "name": "cpu-state", - "type": "507" + "name": "queues", + "default": null, + "type": "int" } ], "meta-type": "object" @@ -23562,20 +23805,1052 @@ "name": "389", "members": [ { - "name": "pc", + "name": "queues", + "default": null, "type": "int" + }, + { + "name": "chardev", + "type": "str" } ], "meta-type": "object" }, { "name": "390", - "meta-type": "enum", - "values": [ - "aarch64", - "alpha", - "arm", - "avr", + "members": [ + { + "name": "addr", + "type": "str" + }, + { + "name": "id-list", + "default": null, + "type": "str" + } + ], + "meta-type": "object" + }, + { + "name": "391", + "members": [ + { + "name": "netdev", + "type": "str" + }, + { + "name": "queue", + "default": null, + "type": "544" + }, + { + "name": "status", + "default": null, + "type": "str" + }, + { + "name": "position", + "default": null, + "type": "str" + }, + { + "name": "insert", + "default": null, + "type": "545" + }, + { + "name": "interval", + "type": "int" + } + ], + "meta-type": "object" + }, + { + "name": "392", + "members": [ + { + "name": "netdev", + "type": "str" + }, + { + "name": "queue", + "default": null, + "type": "544" + }, + { + "name": "status", + "default": null, + "type": "str" + }, + { + "name": "position", + "default": null, + "type": "str" + }, + { + "name": "insert", + "default": null, + "type": "545" + }, + { + "name": "file", + "type": "str" + }, + { + "name": "maxlen", + "default": null, + "type": "int" + } + ], + "meta-type": "object" + }, + { + "name": "393", + "members": [ + { + "name": "netdev", + "type": "str" + }, + { + "name": "queue", + "default": null, + "type": "544" + }, + { + "name": "status", + "default": null, + "type": "str" + }, + { + "name": "position", + "default": null, + "type": "str" + }, + { + "name": "insert", + "default": null, + "type": "545" + }, + { + "name": "outdev", + "type": "str" + }, + { + "name": "vnet_hdr_support", + "default": null, + "type": "bool" + } + ], + "meta-type": "object" + }, + { + "name": "394", + "members": [ + { + "name": "netdev", + "type": "str" + }, + { + "name": "queue", + "default": null, + "type": "544" + }, + { + "name": "status", + "default": null, + "type": "str" + }, + { + "name": "position", + "default": null, + "type": "str" + }, + { + "name": "insert", + "default": null, + "type": "545" + }, + { + "name": "indev", + "default": null, + "type": "str" + }, + { + "name": "outdev", + "default": null, + "type": "str" + }, + { + "name": "vnet_hdr_support", + "default": null, + "type": "bool" + } + ], + "meta-type": "object" + }, + { + "name": "395", + "members": [ + { + "name": "netdev", + "type": "str" + }, + { + "name": "queue", + "default": null, + "type": "544" + }, + { + "name": "status", + "default": null, + "type": "str" + }, + { + "name": "position", + "default": null, + "type": "str" + }, + { + "name": "insert", + "default": null, + "type": "545" + } + ], + "meta-type": "object" + }, + { + "name": "396", + "members": [ + { + "name": "netdev", + "type": "str" + }, + { + "name": "queue", + "default": null, + "type": "544" + }, + { + "name": "status", + "default": null, + "type": "str" + }, + { + "name": "position", + "default": null, + "type": "str" + }, + { + "name": "insert", + "default": null, + "type": "545" + }, + { + "name": "vnet_hdr_support", + "default": null, + "type": "bool" + } + ], + "meta-type": "object" + }, + { + "name": "397", + "members": [ + { + "name": "name", + "type": "str" + }, + { + "name": "server", + "default": null, + "type": "str" + }, + { + "name": "port", + "default": null, + "type": "str" + }, + { + "name": "x-origin", + "default": null, + "type": "str" + }, + { + "name": "y-origin", + "default": null, + "type": "str" + }, + { + "name": "width", + "default": null, + "type": "str" + }, + { + "name": "height", + "default": null, + "type": "str" + } + ], + "meta-type": "object" + }, + { + "name": "398", + "members": [ + { + "name": "evdev", + "type": "str" + }, + { + "name": "grab_all", + "default": null, + "type": "bool" + }, + { + "name": "repeat", + "default": null, + "type": "bool" + }, + { + "name": "grab-toggle", + "default": null, + "type": "546" + } + ], + "meta-type": "object" + }, + { + "name": "399", + "members": [ + { + "name": "poll-max-ns", + "default": null, + "type": "int" + }, + { + "name": "poll-grow", + "default": null, + "type": "int" + }, + { + "name": "poll-shrink", + "default": null, + "type": "int" + } + ], + "meta-type": "object" + }, + { + "name": "400", + "members": [ + { + "name": "dump", + "default": null, + "type": "bool" + }, + { + "name": "host-nodes", + "default": null, + "type": "[int]" + }, + { + "name": "merge", + "default": null, + "type": "bool" + }, + { + "name": "policy", + "default": null, + "type": "426" + }, + { + "name": "prealloc", + "default": null, + "type": "bool" + }, + { + "name": "prealloc-threads", + "default": null, + "type": "int" + }, + { + "name": "share", + "default": null, + "type": "bool" + }, + { + "name": "size", + "type": "int" + }, + { + "name": "x-use-canonical-path-for-ramblock-id", + "default": null, + "type": "bool" + }, + { + "name": "align", + "default": null, + "type": "int" + }, + { + "name": "discard-data", + "default": null, + "type": "bool" + }, + { + "name": "mem-path", + "type": "str" + }, + { + "name": "pmem", + "default": null, + "type": "bool" + }, + { + "name": "readonly", + "default": null, + "type": "bool" + } + ], + "meta-type": "object" + }, + { + "name": "401", + "members": [ + { + "name": "dump", + "default": null, + "type": "bool" + }, + { + "name": "host-nodes", + "default": null, + "type": "[int]" + }, + { + "name": "merge", + "default": null, + "type": "bool" + }, + { + "name": "policy", + "default": null, + "type": "426" + }, + { + "name": "prealloc", + "default": null, + "type": "bool" + }, + { + "name": "prealloc-threads", + "default": null, + "type": "int" + }, + { + "name": "share", + "default": null, + "type": "bool" + }, + { + "name": "size", + "type": "int" + }, + { + "name": "x-use-canonical-path-for-ramblock-id", + "default": null, + "type": "bool" + }, + { + "name": "hugetlb", + "default": null, + "type": "bool" + }, + { + "name": "hugetlbsize", + "default": null, + "type": "int" + }, + { + "name": "seal", + "default": null, + "type": "bool" + } + ], + "meta-type": "object" + }, + { + "name": "402", + "members": [ + { + "name": "dump", + "default": null, + "type": "bool" + }, + { + "name": "host-nodes", + "default": null, + "type": "[int]" + }, + { + "name": "merge", + "default": null, + "type": "bool" + }, + { + "name": "policy", + "default": null, + "type": "426" + }, + { + "name": "prealloc", + "default": null, + "type": "bool" + }, + { + "name": "prealloc-threads", + "default": null, + "type": "int" + }, + { + "name": "share", + "default": null, + "type": "bool" + }, + { + "name": "size", + "type": "int" + }, + { + "name": "x-use-canonical-path-for-ramblock-id", + "default": null, + "type": "bool" + } + ], + "meta-type": "object" + }, + { + "name": "403", + "members": [ + { + "name": "path", + "type": "str" + } + ], + "meta-type": "object" + }, + { + "name": "404", + "members": [ + { + "name": "opened", + "default": null, + "type": "bool", + "features": [ + "deprecated" + ] + } + ], + "meta-type": "object" + }, + { + "name": "405", + "members": [ + { + "name": "opened", + "default": null, + "type": "bool", + "features": [ + "deprecated" + ] + }, + { + "name": "chardev", + "type": "str" + } + ], + "meta-type": "object" + }, + { + "name": "406", + "members": [ + { + "name": "opened", + "default": null, + "type": "bool", + "features": [ + "deprecated" + ] + }, + { + "name": "filename", + "default": null, + "type": "str" + } + ], + "meta-type": "object" + }, + { + "name": "407", + "members": [ + { + "name": "loaded", + "default": null, + "type": "bool", + "features": [ + "deprecated" + ] + }, + { + "name": "format", + "default": null, + "type": "547" + }, + { + "name": "keyid", + "default": null, + "type": "str" + }, + { + "name": "iv", + "default": null, + "type": "str" + }, + { + "name": "data", + "default": null, + "type": "str" + }, + { + "name": "file", + "default": null, + "type": "str" + } + ], + "meta-type": "object" + }, + { + "name": "408", + "members": [ + { + "name": "loaded", + "default": null, + "type": "bool", + "features": [ + "deprecated" + ] + }, + { + "name": "format", + "default": null, + "type": "547" + }, + { + "name": "keyid", + "default": null, + "type": "str" + }, + { + "name": "iv", + "default": null, + "type": "str" + }, + { + "name": "serial", + "type": "int" + } + ], + "meta-type": "object" + }, + { + "name": "410", + "members": [ + { + "name": "limits", + "default": null, + "type": "548" + }, + { + "name": "x-iops-total", + "default": null, + "type": "int" + }, + { + "name": "x-iops-total-max", + "default": null, + "type": "int" + }, + { + "name": "x-iops-total-max-length", + "default": null, + "type": "int" + }, + { + "name": "x-iops-read", + "default": null, + "type": "int" + }, + { + "name": "x-iops-read-max", + "default": null, + "type": "int" + }, + { + "name": "x-iops-read-max-length", + "default": null, + "type": "int" + }, + { + "name": "x-iops-write", + "default": null, + "type": "int" + }, + { + "name": "x-iops-write-max", + "default": null, + "type": "int" + }, + { + "name": "x-iops-write-max-length", + "default": null, + "type": "int" + }, + { + "name": "x-bps-total", + "default": null, + "type": "int" + }, + { + "name": "x-bps-total-max", + "default": null, + "type": "int" + }, + { + "name": "x-bps-total-max-length", + "default": null, + "type": "int" + }, + { + "name": "x-bps-read", + "default": null, + "type": "int" + }, + { + "name": "x-bps-read-max", + "default": null, + "type": "int" + }, + { + "name": "x-bps-read-max-length", + "default": null, + "type": "int" + }, + { + "name": "x-bps-write", + "default": null, + "type": "int" + }, + { + "name": "x-bps-write-max", + "default": null, + "type": "int" + }, + { + "name": "x-bps-write-max-length", + "default": null, + "type": "int" + }, + { + "name": "x-iops-size", + "default": null, + "type": "int" + } + ], + "meta-type": "object" + }, + { + "name": "411", + "members": [ + { + "name": "verify-peer", + "default": null, + "type": "bool" + }, + { + "name": "dir", + "default": null, + "type": "str" + }, + { + "name": "endpoint", + "default": null, + "type": "549" + }, + { + "name": "priority", + "default": null, + "type": "str" + }, + { + "name": "loaded", + "default": null, + "type": "bool", + "features": [ + "deprecated" + ] + } + ], + "meta-type": "object" + }, + { + "name": "412", + "members": [ + { + "name": "verify-peer", + "default": null, + "type": "bool" + }, + { + "name": "dir", + "default": null, + "type": "str" + }, + { + "name": "endpoint", + "default": null, + "type": "549" + }, + { + "name": "priority", + "default": null, + "type": "str" + }, + { + "name": "loaded", + "default": null, + "type": "bool", + "features": [ + "deprecated" + ] + }, + { + "name": "username", + "default": null, + "type": "str" + } + ], + "meta-type": "object" + }, + { + "name": "413", + "members": [ + { + "name": "verify-peer", + "default": null, + "type": "bool" + }, + { + "name": "dir", + "default": null, + "type": "str" + }, + { + "name": "endpoint", + "default": null, + "type": "549" + }, + { + "name": "priority", + "default": null, + "type": "str" + }, + { + "name": "loaded", + "default": null, + "type": "bool", + "features": [ + "deprecated" + ] + }, + { + "name": "sanity-check", + "default": null, + "type": "bool" + }, + { + "name": "passwordid", + "default": null, + "type": "str" + } + ], + "meta-type": "object" + }, + { + "name": "414", + "members": [ + { + "name": "verify-peer", + "default": null, + "type": "bool" + }, + { + "name": "dir", + "default": null, + "type": "str" + }, + { + "name": "endpoint", + "default": null, + "type": "549" + }, + { + "name": "priority", + "default": null, + "type": "str" + } + ], + "meta-type": "object" + }, + { + "name": "415", + "members": [ + { + "name": "fd", + "type": "str" + }, + { + "name": "devid", + "type": "str" + } + ], + "meta-type": "object" + }, + { + "name": "416", + "members": [ + { + "name": "node-id", + "default": null, + "type": "int" + }, + { + "name": "socket-id", + "default": null, + "type": "int" + }, + { + "name": "die-id", + "default": null, + "type": "int" + }, + { + "name": "core-id", + "default": null, + "type": "int" + }, + { + "name": "thread-id", + "default": null, + "type": "int" + } + ], + "meta-type": "object" + }, + { + "name": "417", + "meta-type": "enum", + "values": [ + "x86", + "sparc", + "ppc", + "mips", + "tricore", + "s390", + "riscv", + "other" + ] + }, + { + "name": "418", + "members": [ + { + "name": "pc", + "type": "int" + } + ], + "meta-type": "object" + }, + { + "name": "419", + "members": [ + { + "name": "pc", + "type": "int" + }, + { + "name": "npc", + "type": "int" + } + ], + "meta-type": "object" + }, + { + "name": "420", + "members": [ + { + "name": "nip", + "type": "int" + } + ], + "meta-type": "object" + }, + { + "name": "421", + "members": [ + { + "name": "PC", + "type": "int" + } + ], + "meta-type": "object" + }, + { + "name": "422", + "members": [ + { + "name": "PC", + "type": "int" + } + ], + "meta-type": "object" + }, + { + "name": "423", + "members": [ + { + "name": "cpu-state", + "type": "550" + } + ], + "meta-type": "object" + }, + { + "name": "424", + "members": [ + { + "name": "pc", + "type": "int" + } + ], + "meta-type": "object" + }, + { + "name": "425", + "meta-type": "enum", + "values": [ + "aarch64", + "alpha", + "arm", + "avr", "cris", "hppa", "i386", @@ -23608,7 +24883,7 @@ ] }, { - "name": "391", + "name": "426", "meta-type": "enum", "values": [ "default", @@ -23618,7 +24893,7 @@ ] }, { - "name": "392", + "name": "427", "meta-type": "enum", "values": [ "node", @@ -23629,7 +24904,7 @@ ] }, { - "name": "393", + "name": "428", "members": [ { "name": "nodeid", @@ -23660,7 +24935,7 @@ "meta-type": "object" }, { - "name": "394", + "name": "429", "members": [ { "name": "src", @@ -23678,7 +24953,7 @@ "meta-type": "object" }, { - "name": "395", + "name": "430", "members": [ { "name": "node-id", @@ -23709,7 +24984,7 @@ "meta-type": "object" }, { - "name": "396", + "name": "431", "members": [ { "name": "initiator", @@ -23721,11 +24996,11 @@ }, { "name": "hierarchy", - "type": "508" + "type": "551" }, { "name": "data-type", - "type": "509" + "type": "552" }, { "name": "latency", @@ -23741,7 +25016,7 @@ "meta-type": "object" }, { - "name": "397", + "name": "432", "members": [ { "name": "node-id", @@ -23757,11 +25032,11 @@ }, { "name": "associativity", - "type": "510" + "type": "553" }, { "name": "policy", - "type": "511" + "type": "554" }, { "name": "line", @@ -23771,7 +25046,7 @@ "meta-type": "object" }, { - "name": "398", + "name": "433", "meta-type": "enum", "values": [ "dimm", @@ -23781,37 +25056,37 @@ ] }, { - "name": "399", + "name": "434", "members": [ { "name": "data", - "type": "512" + "type": "555" } ], "meta-type": "object" }, { - "name": "400", + "name": "435", "members": [ { "name": "data", - "type": "513" + "type": "556" } ], "meta-type": "object" }, { - "name": "401", + "name": "436", "members": [ { "name": "data", - "type": "514" + "type": "557" } ], "meta-type": "object" }, { - "name": "402", + "name": "437", "members": [ { "name": "name", @@ -23826,7 +25101,7 @@ "meta-type": "object" }, { - "name": "403", + "name": "438", "meta-type": "enum", "values": [ "incompatible", @@ -23836,7 +25111,7 @@ ] }, { - "name": "404", + "name": "439", "meta-type": "enum", "values": [ "static", @@ -23844,7 +25119,7 @@ ] }, { - "name": "405", + "name": "440", "meta-type": "enum", "values": [ "none", @@ -23853,7 +25128,7 @@ ] }, { - "name": "406", + "name": "441", "meta-type": "enum", "values": [ "block-node", @@ -23862,7 +25137,7 @@ ] }, { - "name": "407", + "name": "442", "members": [ { "name": "node-name", @@ -23872,7 +25147,7 @@ "meta-type": "object" }, { - "name": "408", + "name": "443", "members": [ { "name": "id", @@ -23882,12 +25157,12 @@ "meta-type": "object" }, { - "name": "[409]", - "element-type": "409", + "name": "[444]", + "element-type": "444", "meta-type": "array" }, { - "name": "409", + "name": "444", "members": [ { "name": "fd", @@ -23902,12 +25177,12 @@ "meta-type": "object" }, { - "name": "[410]", - "element-type": "410", + "name": "[445]", + "element-type": "445", "meta-type": "array" }, { - "name": "410", + "name": "445", "members": [ { "name": "name", @@ -23915,7 +25190,7 @@ }, { "name": "type", - "type": "515" + "type": "558" }, { "name": "help", @@ -23931,7 +25206,7 @@ "meta-type": "object" }, { - "name": "411", + "name": "446", "meta-type": "enum", "values": [ "uninit", @@ -23943,7 +25218,7 @@ ] }, { - "name": "412", + "name": "447", "meta-type": "enum", "values": [ "DIMM", @@ -23951,12 +25226,12 @@ ] }, { - "name": "[413]", - "element-type": "413", + "name": "[448]", + "element-type": "448", "meta-type": "array" }, { - "name": "413", + "name": "448", "members": [ { "name": "bus", @@ -23972,11 +25247,11 @@ }, { "name": "class_info", - "type": "516" + "type": "559" }, { "name": "id", - "type": "517" + "type": "560" }, { "name": "irq", @@ -23994,17 +25269,17 @@ { "name": "pci_bridge", "default": null, - "type": "518" + "type": "561" }, { "name": "regions", - "type": "[519]" + "type": "[562]" } ], "meta-type": "object" }, { - "name": "414", + "name": "449", "meta-type": "enum", "values": [ "hyper-v", @@ -24012,7 +25287,7 @@ ] }, { - "name": "415", + "name": "450", "members": [ { "name": "arg1", @@ -24038,7 +25313,7 @@ "meta-type": "object" }, { - "name": "416", + "name": "451", "members": [ { "name": "core", @@ -24054,13 +25329,13 @@ }, { "name": "reason", - "type": "520" + "type": "563" } ], "meta-type": "object" }, { - "name": "417", + "name": "452", "meta-type": "enum", "values": [ "active", @@ -24071,12 +25346,12 @@ ] }, { - "name": "[418]", - "element-type": "418", + "name": "[453]", + "element-type": "453", "meta-type": "array" }, { - "name": "418", + "name": "453", "members": [ { "name": "interval_length", @@ -24130,7 +25405,7 @@ "meta-type": "object" }, { - "name": "419", + "name": "454", "members": [ { "name": "boundaries", @@ -24144,7 +25419,7 @@ "meta-type": "object" }, { - "name": "420", + "name": "455", "members": [ { "name": "discard-nb-ok", @@ -24162,7 +25437,7 @@ "meta-type": "object" }, { - "name": "421", + "name": "456", "members": [ { "name": "completion-errors", @@ -24185,32 +25460,32 @@ "meta-type": "array" }, { - "name": "422", + "name": "457", "tag": "type", "variants": [ { "case": "qcow2", - "type": "522" + "type": "565" }, { "case": "vmdk", - "type": "523" + "type": "566" }, { "case": "luks", - "type": "524" + "type": "567" } ], "members": [ { "name": "type", - "type": "521" + "type": "564" } ], "meta-type": "object" }, { - "name": "423", + "name": "458", "meta-type": "enum", "values": [ "block-backend", @@ -24219,12 +25494,12 @@ ] }, { - "name": "[424]", - "element-type": "424", + "name": "[459]", + "element-type": "459", "meta-type": "array" }, { - "name": "424", + "name": "459", "meta-type": "enum", "values": [ "consistent-read", @@ -24235,7 +25510,7 @@ ] }, { - "name": "425", + "name": "460", "members": [ { "type": "50" @@ -24247,16 +25522,16 @@ "meta-type": "alternate" }, { - "name": "[426]", - "element-type": "426", + "name": "[461]", + "element-type": "461", "meta-type": "array" }, { - "name": "426", + "name": "461", "members": [ { "name": "event", - "type": "525" + "type": "568" }, { "name": "state", @@ -24266,7 +25541,7 @@ { "name": "iotype", "default": null, - "type": "526" + "type": "569" }, { "name": "errno", @@ -24292,16 +25567,16 @@ "meta-type": "object" }, { - "name": "[427]", - "element-type": "427", + "name": "[462]", + "element-type": "462", "meta-type": "array" }, { - "name": "427", + "name": "462", "members": [ { "name": "event", - "type": "525" + "type": "568" }, { "name": "state", @@ -24316,7 +25591,7 @@ "meta-type": "object" }, { - "name": "428", + "name": "463", "meta-type": "enum", "values": [ "auto", @@ -24325,7 +25600,7 @@ ] }, { - "name": "429", + "name": "464", "meta-type": "enum", "values": [ "threads", @@ -24334,7 +25609,7 @@ ] }, { - "name": "430", + "name": "465", "meta-type": "enum", "values": [ "tcp", @@ -24342,7 +25617,7 @@ ] }, { - "name": "431", + "name": "466", "meta-type": "enum", "values": [ "crc32c", @@ -24352,11 +25627,11 @@ ] }, { - "name": "432", + "name": "467", "members": [ { "name": "type", - "type": "527" + "type": "570" }, { "name": "host", @@ -24366,7 +25641,7 @@ "meta-type": "object" }, { - "name": "433", + "name": "468", "members": [ { "type": "50" @@ -24381,62 +25656,62 @@ "meta-type": "alternate" }, { - "name": "434", + "name": "469", "members": [ { - "type": "528" + "type": "571" }, { - "type": "529" + "type": "572" } ], "meta-type": "alternate" }, { - "name": "435", + "name": "470", "tag": "format", "variants": [ { "case": "aes", - "type": "531" + "type": "574" }, { "case": "luks", - "type": "532" + "type": "575" } ], "members": [ { "name": "format", - "type": "530" + "type": "573" } ], "meta-type": "object" }, { - "name": "436", + "name": "471", "tag": "format", "variants": [ { "case": "aes", - "type": "531" + "type": "574" } ], "members": [ { "name": "format", - "type": "533" + "type": "576" } ], "meta-type": "object" }, { - "name": "[425]", - "element-type": "425", + "name": "[460]", + "element-type": "460", "meta-type": "array" }, { - "name": "437", + "name": "472", "meta-type": "enum", "values": [ "quorum", @@ -24444,12 +25719,12 @@ ] }, { - "name": "[438]", - "element-type": "438", + "name": "[473]", + "element-type": "473", "meta-type": "array" }, { - "name": "438", + "name": "473", "meta-type": "enum", "values": [ "cephx", @@ -24457,12 +25732,12 @@ ] }, { - "name": "[439]", - "element-type": "439", + "name": "[474]", + "element-type": "474", "meta-type": "array" }, { - "name": "439", + "name": "474", "members": [ { "name": "host", @@ -24476,7 +25751,7 @@ "meta-type": "object" }, { - "name": "440", + "name": "475", "meta-type": "enum", "values": [ "primary", @@ -24484,7 +25759,7 @@ ] }, { - "name": "441", + "name": "476", "members": [ { "name": "host", @@ -24523,12 +25798,12 @@ "meta-type": "object" }, { - "name": "442", + "name": "477", "tag": "mode", "variants": [ { "case": "hash", - "type": "535" + "type": "578" }, { "case": "none", @@ -24542,13 +25817,13 @@ "members": [ { "name": "mode", - "type": "534" + "type": "577" } ], "meta-type": "object" }, { - "name": "443", + "name": "478", "members": [ { "name": "filename", @@ -24561,7 +25836,7 @@ { "name": "preallocation", "default": null, - "type": "536" + "type": "579" }, { "name": "nocow", @@ -24577,7 +25852,7 @@ "meta-type": "object" }, { - "name": "444", + "name": "479", "members": [ { "name": "location", @@ -24590,13 +25865,13 @@ { "name": "preallocation", "default": null, - "type": "536" + "type": "579" } ], "meta-type": "object" }, { - "name": "445", + "name": "480", "members": [ { "name": "key-secret", @@ -24606,27 +25881,27 @@ { "name": "cipher-alg", "default": null, - "type": "537" + "type": "580" }, { "name": "cipher-mode", "default": null, - "type": "538" + "type": "581" }, { "name": "ivgen-alg", "default": null, - "type": "539" + "type": "582" }, { "name": "ivgen-hash-alg", "default": null, - "type": "540" + "type": "583" }, { "name": "hash-alg", "default": null, - "type": "540" + "type": "583" }, { "name": "iter-time", @@ -24635,7 +25910,7 @@ }, { "name": "file", - "type": "425" + "type": "460" }, { "name": "size", @@ -24644,13 +25919,13 @@ { "name": "preallocation", "default": null, - "type": "536" + "type": "579" } ], "meta-type": "object" }, { - "name": "446", + "name": "481", "members": [ { "name": "location", @@ -24664,11 +25939,11 @@ "meta-type": "object" }, { - "name": "447", + "name": "482", "members": [ { "name": "file", - "type": "425" + "type": "460" }, { "name": "size", @@ -24683,11 +25958,11 @@ "meta-type": "object" }, { - "name": "448", + "name": "483", "members": [ { "name": "file", - "type": "425" + "type": "460" }, { "name": "size", @@ -24701,22 +25976,22 @@ { "name": "encrypt", "default": null, - "type": "541" + "type": "584" } ], "meta-type": "object" }, { - "name": "449", + "name": "484", "members": [ { "name": "file", - "type": "425" + "type": "460" }, { "name": "data-file", "default": null, - "type": "425" + "type": "460" }, { "name": "data-file-raw", @@ -24735,7 +26010,7 @@ { "name": "version", "default": null, - "type": "542" + "type": "585" }, { "name": "backing-file", @@ -24750,7 +26025,7 @@ { "name": "encrypt", "default": null, - "type": "541" + "type": "584" }, { "name": "cluster-size", @@ -24760,7 +26035,7 @@ { "name": "preallocation", "default": null, - "type": "536" + "type": "579" }, { "name": "lazy-refcounts", @@ -24775,17 +26050,17 @@ { "name": "compression-type", "default": null, - "type": "543" + "type": "586" } ], "meta-type": "object" }, { - "name": "450", + "name": "485", "members": [ { "name": "file", - "type": "425" + "type": "460" }, { "name": "size", @@ -24815,7 +26090,7 @@ "meta-type": "object" }, { - "name": "451", + "name": "486", "members": [ { "name": "location", @@ -24834,7 +26109,7 @@ "meta-type": "object" }, { - "name": "452", + "name": "487", "members": [ { "name": "location", @@ -24852,12 +26127,12 @@ { "name": "preallocation", "default": null, - "type": "536" + "type": "579" }, { "name": "redundancy", "default": null, - "type": "544" + "type": "587" }, { "name": "object-size", @@ -24868,7 +26143,7 @@ "meta-type": "object" }, { - "name": "453", + "name": "488", "members": [ { "name": "location", @@ -24882,11 +26157,11 @@ "meta-type": "object" }, { - "name": "454", + "name": "489", "members": [ { "name": "file", - "type": "425" + "type": "460" }, { "name": "size", @@ -24895,17 +26170,17 @@ { "name": "preallocation", "default": null, - "type": "536" + "type": "579" } ], "meta-type": "object" }, { - "name": "455", + "name": "490", "members": [ { "name": "file", - "type": "425" + "type": "460" }, { "name": "size", @@ -24924,7 +26199,7 @@ { "name": "subformat", "default": null, - "type": "545" + "type": "588" }, { "name": "block-state-zero", @@ -24935,11 +26210,11 @@ "meta-type": "object" }, { - "name": "456", + "name": "491", "members": [ { "name": "file", - "type": "425" + "type": "460" }, { "name": "size", @@ -24948,12 +26223,12 @@ { "name": "extents", "default": null, - "type": "[425]" + "type": "[460]" }, { "name": "subformat", "default": null, - "type": "546" + "type": "589" }, { "name": "backing-file", @@ -24963,7 +26238,7 @@ { "name": "adapter-type", "default": null, - "type": "547" + "type": "590" }, { "name": "hwversion", @@ -24979,11 +26254,11 @@ "meta-type": "object" }, { - "name": "457", + "name": "492", "members": [ { "name": "file", - "type": "425" + "type": "460" }, { "name": "size", @@ -24992,7 +26267,7 @@ { "name": "subformat", "default": null, - "type": "548" + "type": "591" }, { "name": "force-size", @@ -25003,11 +26278,11 @@ "meta-type": "object" }, { - "name": "458", + "name": "493", "members": [ { "name": "state", - "type": "549" + "type": "592" }, { "name": "new-secret", @@ -25038,12 +26313,12 @@ "meta-type": "object" }, { - "name": "459", + "name": "494", "members": [ { "name": "encrypt", "default": null, - "type": "550" + "type": "593" } ], "meta-type": "object" @@ -25054,7 +26329,7 @@ "meta-type": "builtin" }, { - "name": "460", + "name": "495", "meta-type": "enum", "values": [ "inet", @@ -25064,47 +26339,47 @@ ] }, { - "name": "461", + "name": "496", "members": [ { "name": "data", - "type": "441" + "type": "476" } ], "meta-type": "object" }, { - "name": "462", + "name": "497", "members": [ { "name": "data", - "type": "489" + "type": "524" } ], "meta-type": "object" }, { - "name": "463", + "name": "498", "members": [ { "name": "data", - "type": "490" + "type": "525" } ], "meta-type": "object" }, { - "name": "464", + "name": "499", "members": [ { "name": "data", - "type": "477" + "type": "512" } ], "meta-type": "object" }, { - "name": "465", + "name": "500", "meta-type": "enum", "values": [ "file", @@ -25130,122 +26405,122 @@ ] }, { - "name": "466", + "name": "501", "members": [ { "name": "data", - "type": "551" + "type": "594" } ], "meta-type": "object" }, { - "name": "467", + "name": "502", "members": [ { "name": "data", - "type": "552" + "type": "595" } ], "meta-type": "object" }, { - "name": "468", + "name": "503", "members": [ { "name": "data", - "type": "553" + "type": "596" } ], "meta-type": "object" }, { - "name": "469", + "name": "504", "members": [ { "name": "data", - "type": "554" + "type": "597" } ], "meta-type": "object" }, { - "name": "470", + "name": "505", "members": [ { "name": "data", - "type": "555" + "type": "598" } ], "meta-type": "object" }, { - "name": "471", + "name": "506", "members": [ { "name": "data", - "type": "556" + "type": "599" } ], "meta-type": "object" }, { - "name": "472", + "name": "507", "members": [ { "name": "data", - "type": "557" + "type": "600" } ], "meta-type": "object" }, { - "name": "473", + "name": "508", "members": [ { "name": "data", - "type": "558" + "type": "601" } ], "meta-type": "object" }, { - "name": "474", + "name": "509", "members": [ { "name": "data", - "type": "559" + "type": "602" } ], "meta-type": "object" }, { - "name": "475", + "name": "510", "members": [ { "name": "data", - "type": "560" + "type": "603" } ], "meta-type": "object" }, { - "name": "476", + "name": "511", "members": [ { "name": "data", - "type": "561" + "type": "604" } ], "meta-type": "object" }, { - "name": "[477]", - "element-type": "477", + "name": "[512]", + "element-type": "512", "meta-type": "array" }, { - "name": "477", + "name": "512", "members": [ { "name": "str", @@ -25255,7 +26530,7 @@ "meta-type": "object" }, { - "name": "478", + "name": "513", "meta-type": "enum", "values": [ "passthrough", @@ -25263,27 +26538,27 @@ ] }, { - "name": "479", + "name": "514", "members": [ { "name": "data", - "type": "562" + "type": "605" } ], "meta-type": "object" }, { - "name": "480", + "name": "515", "members": [ { "name": "data", - "type": "563" + "type": "606" } ], "meta-type": "object" }, { - "name": "481", + "name": "516", "meta-type": "enum", "values": [ "number", @@ -25291,7 +26566,7 @@ ] }, { - "name": "482", + "name": "517", "members": [ { "name": "data", @@ -25301,17 +26576,17 @@ "meta-type": "object" }, { - "name": "483", + "name": "518", "members": [ { "name": "data", - "type": "564" + "type": "607" } ], "meta-type": "object" }, { - "name": "484", + "name": "519", "meta-type": "enum", "values": [ "key", @@ -25321,37 +26596,37 @@ ] }, { - "name": "485", + "name": "520", "members": [ { "name": "data", - "type": "565" + "type": "608" } ], "meta-type": "object" }, { - "name": "486", + "name": "521", "members": [ { "name": "data", - "type": "566" + "type": "609" } ], "meta-type": "object" }, { - "name": "487", + "name": "522", "members": [ { "name": "data", - "type": "567" + "type": "610" } ], "meta-type": "object" }, { - "name": "488", + "name": "523", "meta-type": "enum", "values": [ "inet", @@ -25361,7 +26636,7 @@ ] }, { - "name": "489", + "name": "524", "members": [ { "name": "path", @@ -25381,7 +26656,7 @@ "meta-type": "object" }, { - "name": "490", + "name": "525", "members": [ { "name": "cid", @@ -25395,12 +26670,12 @@ "meta-type": "object" }, { - "name": "[491]", - "element-type": "491", + "name": "[526]", + "element-type": "526", "meta-type": "array" }, { - "name": "491", + "name": "526", "members": [ { "name": "name", @@ -25413,13 +26688,13 @@ { "name": "transform", "default": null, - "type": "568" + "type": "611" } ], "meta-type": "object" }, { - "name": "492", + "name": "527", "meta-type": "enum", "values": [ "abort", @@ -25437,17 +26712,17 @@ ] }, { - "name": "493", + "name": "528", "members": [ { "name": "data", - "type": "569" + "type": "612" } ], "meta-type": "object" }, { - "name": "494", + "name": "529", "members": [ { "name": "data", @@ -25457,7 +26732,7 @@ "meta-type": "object" }, { - "name": "495", + "name": "530", "members": [ { "name": "data", @@ -25467,7 +26742,7 @@ "meta-type": "object" }, { - "name": "496", + "name": "531", "members": [ { "name": "data", @@ -25477,7 +26752,7 @@ "meta-type": "object" }, { - "name": "497", + "name": "532", "members": [ { "name": "data", @@ -25487,7 +26762,7 @@ "meta-type": "object" }, { - "name": "498", + "name": "533", "members": [ { "name": "data", @@ -25497,7 +26772,7 @@ "meta-type": "object" }, { - "name": "499", + "name": "534", "members": [ { "name": "data", @@ -25507,7 +26782,7 @@ "meta-type": "object" }, { - "name": "500", + "name": "535", "members": [ { "name": "data", @@ -25517,7 +26792,7 @@ "meta-type": "object" }, { - "name": "501", + "name": "536", "members": [ { "name": "data", @@ -25527,7 +26802,7 @@ "meta-type": "object" }, { - "name": "502", + "name": "537", "meta-type": "enum", "values": [ "individual", @@ -25535,7 +26810,7 @@ ] }, { - "name": "503", + "name": "538", "meta-type": "enum", "values": [ "string", @@ -25549,12 +26824,12 @@ ] }, { - "name": "[504]", - "element-type": "504", + "name": "[539]", + "element-type": "539", "meta-type": "array" }, { - "name": "504", + "name": "539", "members": [ { "name": "name", @@ -25578,41 +26853,219 @@ "meta-type": "object" }, { - "name": "[505]", - "element-type": "505", + "name": "[540]", + "element-type": "540", "meta-type": "array" }, { - "name": "505", + "name": "540", + "members": [ + { + "name": "case", + "type": "str" + }, + { + "name": "type", + "type": "str" + } + ], + "meta-type": "object" + }, + { + "name": "[541]", + "element-type": "541", + "meta-type": "array" + }, + { + "name": "541", + "members": [ + { + "name": "type", + "type": "str" + } + ], + "meta-type": "object" + }, + { + "name": "542", + "meta-type": "enum", + "values": [ + "deny", + "allow" + ] + }, + { + "name": "[543]", + "element-type": "543", + "meta-type": "array" + }, + { + "name": "543", + "members": [ + { + "name": "match", + "type": "str" + }, + { + "name": "policy", + "type": "542" + }, + { + "name": "format", + "default": null, + "type": "613" + } + ], + "meta-type": "object" + }, + { + "name": "544", + "meta-type": "enum", + "values": [ + "all", + "rx", + "tx" + ] + }, + { + "name": "545", + "meta-type": "enum", + "values": [ + "before", + "behind" + ] + }, + { + "name": "546", + "meta-type": "enum", + "values": [ + "ctrl-ctrl", + "alt-alt", + "shift-shift", + "meta-meta", + "scrolllock", + "ctrl-scrolllock" + ] + }, + { + "name": "547", + "meta-type": "enum", + "values": [ + "raw", + "base64" + ] + }, + { + "name": "548", "members": [ { - "name": "case", - "type": "str" + "name": "iops-total", + "default": null, + "type": "int" + }, + { + "name": "iops-total-max", + "default": null, + "type": "int" + }, + { + "name": "iops-total-max-length", + "default": null, + "type": "int" + }, + { + "name": "iops-read", + "default": null, + "type": "int" + }, + { + "name": "iops-read-max", + "default": null, + "type": "int" + }, + { + "name": "iops-read-max-length", + "default": null, + "type": "int" + }, + { + "name": "iops-write", + "default": null, + "type": "int" + }, + { + "name": "iops-write-max", + "default": null, + "type": "int" + }, + { + "name": "iops-write-max-length", + "default": null, + "type": "int" + }, + { + "name": "bps-total", + "default": null, + "type": "int" + }, + { + "name": "bps-total-max", + "default": null, + "type": "int" + }, + { + "name": "bps-total-max-length", + "default": null, + "type": "int" + }, + { + "name": "bps-read", + "default": null, + "type": "int" + }, + { + "name": "bps-read-max", + "default": null, + "type": "int" + }, + { + "name": "bps-read-max-length", + "default": null, + "type": "int" + }, + { + "name": "bps-write", + "default": null, + "type": "int" + }, + { + "name": "bps-write-max", + "default": null, + "type": "int" }, { - "name": "type", - "type": "str" + "name": "bps-write-max-length", + "default": null, + "type": "int" + }, + { + "name": "iops-size", + "default": null, + "type": "int" } ], "meta-type": "object" }, { - "name": "[506]", - "element-type": "506", - "meta-type": "array" - }, - { - "name": "506", - "members": [ - { - "name": "type", - "type": "str" - } - ], - "meta-type": "object" + "name": "549", + "meta-type": "enum", + "values": [ + "client", + "server" + ] }, { - "name": "507", + "name": "550", "meta-type": "enum", "values": [ "uninitialized", @@ -25623,7 +27076,7 @@ ] }, { - "name": "508", + "name": "551", "meta-type": "enum", "values": [ "memory", @@ -25633,7 +27086,7 @@ ] }, { - "name": "509", + "name": "552", "meta-type": "enum", "values": [ "access-latency", @@ -25645,7 +27098,7 @@ ] }, { - "name": "510", + "name": "553", "meta-type": "enum", "values": [ "none", @@ -25654,7 +27107,7 @@ ] }, { - "name": "511", + "name": "554", "meta-type": "enum", "values": [ "none", @@ -25663,7 +27116,7 @@ ] }, { - "name": "512", + "name": "555", "members": [ { "name": "id", @@ -25702,7 +27155,7 @@ "meta-type": "object" }, { - "name": "513", + "name": "556", "members": [ { "name": "id", @@ -25725,7 +27178,7 @@ "meta-type": "object" }, { - "name": "514", + "name": "557", "members": [ { "name": "id", @@ -25764,7 +27217,7 @@ "meta-type": "object" }, { - "name": "515", + "name": "558", "meta-type": "enum", "values": [ "string", @@ -25774,7 +27227,7 @@ ] }, { - "name": "516", + "name": "559", "members": [ { "name": "desc", @@ -25789,7 +27242,7 @@ "meta-type": "object" }, { - "name": "517", + "name": "560", "members": [ { "name": "device", @@ -25813,27 +27266,27 @@ "meta-type": "object" }, { - "name": "518", + "name": "561", "members": [ { "name": "bus", - "type": "570" + "type": "614" }, { "name": "devices", "default": null, - "type": "[413]" + "type": "[448]" } ], "meta-type": "object" }, { - "name": "[519]", - "element-type": "519", + "name": "[562]", + "element-type": "562", "meta-type": "array" }, { - "name": "519", + "name": "562", "members": [ { "name": "bar", @@ -25865,7 +27318,7 @@ "meta-type": "object" }, { - "name": "520", + "name": "563", "meta-type": "enum", "values": [ "unknown", @@ -25876,7 +27329,7 @@ ] }, { - "name": "521", + "name": "564", "meta-type": "enum", "values": [ "qcow2", @@ -25885,37 +27338,37 @@ ] }, { - "name": "522", + "name": "565", "members": [ { "name": "data", - "type": "571" + "type": "615" } ], "meta-type": "object" }, { - "name": "523", + "name": "566", "members": [ { "name": "data", - "type": "572" + "type": "616" } ], "meta-type": "object" }, { - "name": "524", + "name": "567", "members": [ { "name": "data", - "type": "573" + "type": "617" } ], "meta-type": "object" }, { - "name": "525", + "name": "568", "meta-type": "enum", "values": [ "l1_update", @@ -25969,7 +27422,7 @@ ] }, { - "name": "526", + "name": "569", "meta-type": "enum", "values": [ "read", @@ -25981,19 +27434,19 @@ ] }, { - "name": "527", + "name": "570", "meta-type": "enum", "values": [ "inet" ] }, { - "name": "528", + "name": "571", "members": [ { "name": "template", "default": null, - "type": "529" + "type": "572" }, { "name": "main-header", @@ -26044,7 +27497,7 @@ "meta-type": "object" }, { - "name": "529", + "name": "572", "meta-type": "enum", "values": [ "none", @@ -26054,7 +27507,7 @@ ] }, { - "name": "530", + "name": "573", "meta-type": "enum", "values": [ "aes", @@ -26062,7 +27515,7 @@ ] }, { - "name": "531", + "name": "574", "members": [ { "name": "key-secret", @@ -26073,7 +27526,7 @@ "meta-type": "object" }, { - "name": "532", + "name": "575", "members": [ { "name": "key-secret", @@ -26084,14 +27537,14 @@ "meta-type": "object" }, { - "name": "533", + "name": "576", "meta-type": "enum", "values": [ "aes" ] }, { - "name": "534", + "name": "577", "meta-type": "enum", "values": [ "none", @@ -26100,11 +27553,11 @@ ] }, { - "name": "535", + "name": "578", "members": [ { "name": "type", - "type": "574" + "type": "618" }, { "name": "hash", @@ -26114,7 +27567,7 @@ "meta-type": "object" }, { - "name": "536", + "name": "579", "meta-type": "enum", "values": [ "off", @@ -26124,7 +27577,7 @@ ] }, { - "name": "537", + "name": "580", "meta-type": "enum", "values": [ "aes-128", @@ -26142,7 +27595,7 @@ ] }, { - "name": "538", + "name": "581", "meta-type": "enum", "values": [ "ecb", @@ -26152,7 +27605,7 @@ ] }, { - "name": "539", + "name": "582", "meta-type": "enum", "values": [ "plain", @@ -26161,7 +27614,7 @@ ] }, { - "name": "540", + "name": "583", "meta-type": "enum", "values": [ "md5", @@ -26174,28 +27627,28 @@ ] }, { - "name": "541", + "name": "584", "tag": "format", "variants": [ { "case": "qcow", - "type": "531" + "type": "574" }, { "case": "luks", - "type": "576" + "type": "620" } ], "members": [ { "name": "format", - "type": "575" + "type": "619" } ], "meta-type": "object" }, { - "name": "542", + "name": "585", "meta-type": "enum", "values": [ "v2", @@ -26203,35 +27656,35 @@ ] }, { - "name": "543", + "name": "586", "meta-type": "enum", "values": [ "zlib" ] }, { - "name": "544", + "name": "587", "tag": "type", "variants": [ { "case": "full", - "type": "578" + "type": "622" }, { "case": "erasure-coded", - "type": "579" + "type": "623" } ], "members": [ { "name": "type", - "type": "577" + "type": "621" } ], "meta-type": "object" }, { - "name": "545", + "name": "588", "meta-type": "enum", "values": [ "dynamic", @@ -26239,7 +27692,7 @@ ] }, { - "name": "546", + "name": "589", "meta-type": "enum", "values": [ "monolithicSparse", @@ -26250,7 +27703,7 @@ ] }, { - "name": "547", + "name": "590", "meta-type": "enum", "values": [ "ide", @@ -26260,7 +27713,7 @@ ] }, { - "name": "548", + "name": "591", "meta-type": "enum", "values": [ "dynamic", @@ -26268,7 +27721,7 @@ ] }, { - "name": "549", + "name": "592", "meta-type": "enum", "values": [ "active", @@ -26276,12 +27729,12 @@ ] }, { - "name": "550", + "name": "593", "tag": "format", "variants": [ { "case": "luks", - "type": "580" + "type": "624" }, { "case": "qcow", @@ -26291,13 +27744,13 @@ "members": [ { "name": "format", - "type": "575" + "type": "619" } ], "meta-type": "object" }, { - "name": "551", + "name": "594", "members": [ { "name": "logfile", @@ -26327,7 +27780,7 @@ "meta-type": "object" }, { - "name": "552", + "name": "595", "members": [ { "name": "logfile", @@ -26347,7 +27800,7 @@ "meta-type": "object" }, { - "name": "553", + "name": "596", "members": [ { "name": "logfile", @@ -26412,7 +27865,7 @@ "meta-type": "object" }, { - "name": "554", + "name": "597", "members": [ { "name": "logfile", @@ -26437,7 +27890,7 @@ "meta-type": "object" }, { - "name": "555", + "name": "598", "members": [ { "name": "logfile", @@ -26453,7 +27906,7 @@ "meta-type": "object" }, { - "name": "556", + "name": "599", "members": [ { "name": "logfile", @@ -26473,7 +27926,7 @@ "meta-type": "object" }, { - "name": "557", + "name": "600", "members": [ { "name": "logfile", @@ -26494,7 +27947,7 @@ "meta-type": "object" }, { - "name": "558", + "name": "601", "members": [ { "name": "logfile", @@ -26514,7 +27967,7 @@ "meta-type": "object" }, { - "name": "559", + "name": "602", "members": [ { "name": "logfile", @@ -26534,7 +27987,7 @@ "meta-type": "object" }, { - "name": "560", + "name": "603", "members": [ { "name": "logfile", @@ -26570,7 +28023,7 @@ "meta-type": "object" }, { - "name": "561", + "name": "604", "members": [ { "name": "logfile", @@ -26591,7 +28044,7 @@ "meta-type": "object" }, { - "name": "562", + "name": "605", "members": [ { "name": "path", @@ -26607,7 +28060,7 @@ "meta-type": "object" }, { - "name": "563", + "name": "606", "members": [ { "name": "chardev", @@ -26617,7 +28070,7 @@ "meta-type": "object" }, { - "name": "564", + "name": "607", "meta-type": "enum", "values": [ "unmapped", @@ -26771,7 +28224,7 @@ ] }, { - "name": "565", + "name": "608", "members": [ { "name": "key", @@ -26785,11 +28238,11 @@ "meta-type": "object" }, { - "name": "566", + "name": "609", "members": [ { "name": "button", - "type": "581" + "type": "625" }, { "name": "down", @@ -26799,11 +28252,11 @@ "meta-type": "object" }, { - "name": "567", + "name": "610", "members": [ { "name": "axis", - "type": "582" + "type": "626" }, { "name": "value", @@ -26813,7 +28266,7 @@ "meta-type": "object" }, { - "name": "568", + "name": "611", "members": [ { "name": "persistent", @@ -26824,13 +28277,21 @@ "meta-type": "object" }, { - "name": "569", + "name": "612", "members": [ ], "meta-type": "object" }, { - "name": "570", + "name": "613", + "meta-type": "enum", + "values": [ + "exact", + "glob" + ] + }, + { + "name": "614", "members": [ { "name": "number", @@ -26846,21 +28307,21 @@ }, { "name": "io_range", - "type": "583" + "type": "627" }, { "name": "memory_range", - "type": "583" + "type": "627" }, { "name": "prefetchable_range", - "type": "583" + "type": "627" } ], "meta-type": "object" }, { - "name": "571", + "name": "615", "members": [ { "name": "compat", @@ -26898,22 +28359,22 @@ { "name": "encrypt", "default": null, - "type": "584" + "type": "628" }, { "name": "bitmaps", "default": null, - "type": "[585]" + "type": "[629]" }, { "name": "compression-type", - "type": "543" + "type": "586" } ], "meta-type": "object" }, { - "name": "572", + "name": "616", "members": [ { "name": "create-type", @@ -26935,28 +28396,28 @@ "meta-type": "object" }, { - "name": "573", + "name": "617", "members": [ { "name": "cipher-alg", - "type": "537" + "type": "580" }, { "name": "cipher-mode", - "type": "538" + "type": "581" }, { "name": "ivgen-alg", - "type": "539" + "type": "582" }, { "name": "ivgen-hash-alg", "default": null, - "type": "540" + "type": "583" }, { "name": "hash-alg", - "type": "540" + "type": "583" }, { "name": "payload-offset", @@ -26972,13 +28433,13 @@ }, { "name": "slots", - "type": "[586]" + "type": "[630]" } ], "meta-type": "object" }, { - "name": "574", + "name": "618", "meta-type": "enum", "values": [ "md5", @@ -26986,7 +28447,7 @@ ] }, { - "name": "575", + "name": "619", "meta-type": "enum", "values": [ "qcow", @@ -26994,7 +28455,7 @@ ] }, { - "name": "576", + "name": "620", "members": [ { "name": "key-secret", @@ -27004,27 +28465,27 @@ { "name": "cipher-alg", "default": null, - "type": "537" + "type": "580" }, { "name": "cipher-mode", "default": null, - "type": "538" + "type": "581" }, { "name": "ivgen-alg", "default": null, - "type": "539" + "type": "582" }, { "name": "ivgen-hash-alg", "default": null, - "type": "540" + "type": "583" }, { "name": "hash-alg", "default": null, - "type": "540" + "type": "583" }, { "name": "iter-time", @@ -27035,7 +28496,7 @@ "meta-type": "object" }, { - "name": "577", + "name": "621", "meta-type": "enum", "values": [ "full", @@ -27043,7 +28504,7 @@ ] }, { - "name": "578", + "name": "622", "members": [ { "name": "copies", @@ -27053,7 +28514,7 @@ "meta-type": "object" }, { - "name": "579", + "name": "623", "members": [ { "name": "data-strips", @@ -27067,11 +28528,11 @@ "meta-type": "object" }, { - "name": "580", + "name": "624", "members": [ { "name": "state", - "type": "549" + "type": "592" }, { "name": "new-secret", @@ -27102,7 +28563,7 @@ "meta-type": "object" }, { - "name": "581", + "name": "625", "meta-type": "enum", "values": [ "left", @@ -27115,7 +28576,7 @@ ] }, { - "name": "582", + "name": "626", "meta-type": "enum", "values": [ "x", @@ -27123,7 +28584,7 @@ ] }, { - "name": "583", + "name": "627", "members": [ { "name": "base", @@ -27137,12 +28598,12 @@ "meta-type": "object" }, { - "name": "584", + "name": "628", "tag": "format", "variants": [ { "case": "luks", - "type": "573" + "type": "617" }, { "case": "aes", @@ -27152,18 +28613,18 @@ "members": [ { "name": "format", - "type": "530" + "type": "573" } ], "meta-type": "object" }, { - "name": "[585]", - "element-type": "585", + "name": "[629]", + "element-type": "629", "meta-type": "array" }, { - "name": "585", + "name": "629", "members": [ { "name": "name", @@ -27175,7 +28636,7 @@ }, { "name": "flags", - "type": "[587]" + "type": "[631]" } ], "meta-type": "object" @@ -27186,12 +28647,12 @@ "meta-type": "array" }, { - "name": "[586]", - "element-type": "586", + "name": "[630]", + "element-type": "630", "meta-type": "array" }, { - "name": "586", + "name": "630", "members": [ { "name": "active", @@ -27215,12 +28676,12 @@ "meta-type": "object" }, { - "name": "[587]", - "element-type": "587", + "name": "[631]", + "element-type": "631", "meta-type": "array" }, { - "name": "587", + "name": "631", "meta-type": "enum", "values": [ "in-use", @@ -27468,6 +28929,7 @@ "amd-ssbd": true, "xop": false, "ibpb": true, + "ibrs": false, "avx": true, "core-capability": false, "vmx-invept-single-context": false, @@ -27801,6 +29263,7 @@ "amd-ssbd": true, "xop": false, "ibpb": true, + "ibrs": false, "avx": true, "core-capability": false, "vmx-invept-single-context": false, @@ -29635,6 +31098,81 @@ "migration-safe": true, "deprecated": false }, + { + "name": "EPYC-Milan-v1", + "typename": "EPYC-Milan-v1-x86_64-cpu", + "unavailable-features": [ + "fma", + "pcid", + "avx", + "f16c", + "avx2", + "invpcid", + "rdseed", + "sha-ni", + "umip", + "rdpid", + "fsrm", + "fxsr-opt", + "misalignsse", + "3dnowprefetch", + "osvw", + "topoext", + "perfctr-core", + "clzero", + "xsaveerptr", + "wbnoinvd", + "ibpb", + "ibrs", + "amd-stibp", + "amd-ssbd", + "nrip-save", + "svme-addr-chk", + "xsavec", + "xsaves" + ], + "static": false, + "migration-safe": true, + "deprecated": false + }, + { + "name": "EPYC-Milan", + "typename": "EPYC-Milan-x86_64-cpu", + "unavailable-features": [ + "fma", + "pcid", + "avx", + "f16c", + "avx2", + "invpcid", + "rdseed", + "sha-ni", + "umip", + "rdpid", + "fsrm", + "fxsr-opt", + "misalignsse", + "3dnowprefetch", + "osvw", + "topoext", + "perfctr-core", + "clzero", + "xsaveerptr", + "wbnoinvd", + "ibpb", + "ibrs", + "amd-stibp", + "amd-ssbd", + "nrip-save", + "svme-addr-chk", + "xsavec", + "xsaves" + ], + "alias-of": "EPYC-Milan-v1", + "static": false, + "migration-safe": true, + "deprecated": false + }, { "name": "EPYC-IBPB", "typename": "EPYC-IBPB-x86_64-cpu", @@ -30497,6 +32035,7 @@ "amd-ssbd": false, "xop": false, "ibpb": false, + "ibrs": false, "avx": false, "core-capability": false, "vmx-invept-single-context": false, @@ -30830,6 +32369,7 @@ "amd-ssbd": false, "xop": false, "ibpb": false, + "ibrs": false, "avx": false, "core-capability": false, "vmx-invept-single-context": false, diff --git a/tests/qemucapabilitiesdata/caps_6.0.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_6.0.0.x86_64.xml index e7e6254293..ee7e3d117e 100644 --- a/tests/qemucapabilitiesdata/caps_6.0.0.x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_6.0.0.x86_64.xml @@ -257,10 +257,11 @@ <flag name='memory-backend-file.x-use-canonical-path-for-ramblock-id'/> <flag name='vnc-opts'/> <flag name='migration-param.block-bitmap-mapping'/> + <flag name='object.qapified'/> <version>5002050</version> <kvmVersion>0</kvmVersion> <microcodeVersion>43100242</microcodeVersion> - <package>v5.2.0-2208-gc79f01c945</package> + <package>v5.2.0-2362-g25fa357a8e</package> <arch>x86_64</arch> <hostCPU type='kvm' model='base' migratability='yes'> <property name='vmx-entry-load-rtit-ctl' type='boolean' value='false'/> @@ -471,6 +472,7 @@ <property name='amd-ssbd' type='boolean' value='true' migratable='yes'/> <property name='xop' type='boolean' value='false'/> <property name='ibpb' type='boolean' value='true' migratable='yes'/> + <property name='ibrs' type='boolean' value='false'/> <property name='avx' type='boolean' value='true' migratable='yes'/> <property name='core-capability' type='boolean' value='false'/> <property name='vmx-invept-single-context' type='boolean' value='false'/> @@ -1196,6 +1198,24 @@ <cpu type='kvm' name='EPYC-v1' typename='EPYC-v1-x86_64-cpu' usable='yes'/> <cpu type='kvm' name='EPYC-Rome-v1' typename='EPYC-Rome-v1-x86_64-cpu' usable='yes'/> <cpu type='kvm' name='EPYC-Rome' typename='EPYC-Rome-x86_64-cpu' usable='yes'/> + <cpu type='kvm' name='EPYC-Milan-v1' typename='EPYC-Milan-v1-x86_64-cpu' usable='no'> + <blocker name='pcid'/> + <blocker name='erms'/> + <blocker name='invpcid'/> + <blocker name='pku'/> + <blocker name='fsrm'/> + <blocker name='ibrs'/> + <blocker name='pku'/> + </cpu> + <cpu type='kvm' name='EPYC-Milan' typename='EPYC-Milan-x86_64-cpu' usable='no'> + <blocker name='pcid'/> + <blocker name='erms'/> + <blocker name='invpcid'/> + <blocker name='pku'/> + <blocker name='fsrm'/> + <blocker name='ibrs'/> + <blocker name='pku'/> + </cpu> <cpu type='kvm' name='EPYC-IBPB' typename='EPYC-IBPB-x86_64-cpu' usable='yes'/> <cpu type='kvm' name='EPYC' typename='EPYC-x86_64-cpu' usable='yes'/> <cpu type='kvm' name='Dhyana-v1' typename='Dhyana-v1-x86_64-cpu' usable='yes'/> @@ -1687,6 +1707,7 @@ <property name='amd-ssbd' type='boolean' value='false'/> <property name='xop' type='boolean' value='false'/> <property name='ibpb' type='boolean' value='false'/> + <property name='ibrs' type='boolean' value='false'/> <property name='avx' type='boolean' value='false'/> <property name='core-capability' type='boolean' value='false'/> <property name='vmx-invept-single-context' type='boolean' value='false'/> @@ -2749,6 +2770,66 @@ <blocker name='xsavec'/> <blocker name='xsaves'/> </cpu> + <cpu type='tcg' name='EPYC-Milan-v1' typename='EPYC-Milan-v1-x86_64-cpu' usable='no'> + <blocker name='fma'/> + <blocker name='pcid'/> + <blocker name='avx'/> + <blocker name='f16c'/> + <blocker name='avx2'/> + <blocker name='invpcid'/> + <blocker name='rdseed'/> + <blocker name='sha-ni'/> + <blocker name='umip'/> + <blocker name='rdpid'/> + <blocker name='fsrm'/> + <blocker name='fxsr-opt'/> + <blocker name='misalignsse'/> + <blocker name='3dnowprefetch'/> + <blocker name='osvw'/> + <blocker name='topoext'/> + <blocker name='perfctr-core'/> + <blocker name='clzero'/> + <blocker name='xsaveerptr'/> + <blocker name='wbnoinvd'/> + <blocker name='ibpb'/> + <blocker name='ibrs'/> + <blocker name='amd-stibp'/> + <blocker name='amd-ssbd'/> + <blocker name='nrip-save'/> + <blocker name='svme-addr-chk'/> + <blocker name='xsavec'/> + <blocker name='xsaves'/> + </cpu> + <cpu type='tcg' name='EPYC-Milan' typename='EPYC-Milan-x86_64-cpu' usable='no'> + <blocker name='fma'/> + <blocker name='pcid'/> + <blocker name='avx'/> + <blocker name='f16c'/> + <blocker name='avx2'/> + <blocker name='invpcid'/> + <blocker name='rdseed'/> + <blocker name='sha-ni'/> + <blocker name='umip'/> + <blocker name='rdpid'/> + <blocker name='fsrm'/> + <blocker name='fxsr-opt'/> + <blocker name='misalignsse'/> + <blocker name='3dnowprefetch'/> + <blocker name='osvw'/> + <blocker name='topoext'/> + <blocker name='perfctr-core'/> + <blocker name='clzero'/> + <blocker name='xsaveerptr'/> + <blocker name='wbnoinvd'/> + <blocker name='ibpb'/> + <blocker name='ibrs'/> + <blocker name='amd-stibp'/> + <blocker name='amd-ssbd'/> + <blocker name='nrip-save'/> + <blocker name='svme-addr-chk'/> + <blocker name='xsavec'/> + <blocker name='xsaves'/> + </cpu> <cpu type='tcg' name='EPYC-IBPB' typename='EPYC-IBPB-x86_64-cpu' usable='no'> <blocker name='fma'/> <blocker name='avx'/> -- 2.29.2

Hack the qemuxml2argvtest to force-validate everything with latest capabilities. The result is expected: 190) QEMU XML-2-ARGV disk-network-tlsx509-vxhs.x86_64-5.0.0 ... failed to validate -blockdev '{"driver":"vxhs","tls-creds":"objlibvirt-3-storage_tls0","vdisk-id":"eb90327c-8302-4725-9e1b-4e85ed4dc251","server":{"host":"192.168.0.1","port":"9999"},"node-name":"libvirt-3-storage","cache":{"direct":true,"no-flush":false},"auto-read-only":true,"discard":"unmap"}' against QAPI schema: { ERROR: variant 'vxhs' for discriminator 'driver' not found FAILED 1036) QEMU XML-2-ARGV launch-security-sev.x86_64-2.12.0 ... failed to validate -object '{"qom-type":"sev-guest","id":"sev0","cbitpos":47,"reduced-phys-bits":1,"policy":1,"dh-cert-file":"/tmp/lib/domain--1-QEMUGuest1/dh_cert.base64","session-file":"/tmp/lib/domain--1-QEMUGuest1/session.base64"}' against QAPI schema: { ERROR: variant 'sev-guest' for discriminator 'qom-type' not found FAILED 1037) QEMU XML-2-ARGV launch-security-sev-missing-platform-info.x86_64-2.12.0 ... failed to validate -object '{"qom-type":"sev-guest","id":"sev0","cbitpos":47,"reduced-phys-bits":1,"policy":1,"dh-cert-file":"/tmp/lib/domain--1-QEMUGuest1/dh_cert.base64","session-file":"/tmp/lib/domain--1-QEMUGuest1/session.base64"}' against QAPI schema: { ERROR: variant 'sev-guest' for discriminator 'qom-type' not found FAILED 'vxhs' was deprecated/removed and is also not an '-object' and 'sev-guest' was not enabled on the box I used for generating the capabilities. --- tests/qemuxml2argvtest.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c index a5e40c218a..1c4ba16bbf 100644 --- a/tests/qemuxml2argvtest.c +++ b/tests/qemuxml2argvtest.c @@ -529,8 +529,8 @@ testCompareXMLToArgvValidateSchema(virQEMUDriverPtr drv, bool netdevQAPIfied = false; bool objectQAPIfied = false; - /* comment out with line comment to enable schema checking for non _CAPS tests - if (!info->schemafile) +// /* comment out with line comment to enable schema checking for non _CAPS tests +// if (!info->schemafile) info->schemafile = testQemuGetLatestCapsForArch(virArchToString(info->arch), "replies"); // */ -- 2.29.2

On Wed, Feb 24, 2021 at 16:57:54 +0100, Peter Krempa wrote:
QEMU plans to QAPIfy object add. This series prepares for the API change (drop of 'props' wrapper for the object) and adds testing based on our qemuxml2argv test data which forces the output to JSON and validates it agains the schema.
Based on Kevin's qemu patches: https://listman.redhat.com/archives/libvir-list/2021-February/msg01168.html
Ping? Kevin already submitted a pull-request with the patches: https://lists.gnu.org/archive/html/qemu-devel/2021-03/msg01773.html Note that the qemu series removes deprecated 'props' wrapper object of object-add, and this series adapts to that!

On Mon, Mar 08, 2021 at 14:40:42 +0100, Peter Krempa wrote:
On Wed, Feb 24, 2021 at 16:57:54 +0100, Peter Krempa wrote:
QEMU plans to QAPIfy object add. This series prepares for the API change (drop of 'props' wrapper for the object) and adds testing based on our qemuxml2argv test data which forces the output to JSON and validates it agains the schema.
Based on Kevin's qemu patches: https://listman.redhat.com/archives/libvir-list/2021-February/msg01168.html
Ping?
Kevin already submitted a pull-request with the patches:
https://lists.gnu.org/archive/html/qemu-devel/2021-03/msg01773.html
Note that the qemu series removes deprecated 'props' wrapper object of object-add, and this series adapts to that!
Correction: the patches removing props from object-add are in v3 on review: https://lists.gnu.org/archive/html/qemu-devel/2021-03/msg02383.html The pull request mentioned above pulls a patch removing props from the qemu iotests and I had a false suffix match when looking at the patch list.
participants (2)
-
Ján Tomko
-
Peter Krempa