aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Maydell <peter.maydell@linaro.org>2024-02-13 10:54:59 +0000
committerPeter Maydell <peter.maydell@linaro.org>2024-02-13 10:54:59 +0000
commit61e7a0d27c1336bade78c08e898801e8e93e0bde (patch)
tree2c94c59eafc7abb48012da0ff9b2624c951fb462
parent5005aed8a7e728d028efb40e243ecfc2b4f3df3a (diff)
parent0afbba6c3255dbe954ef609987b610cdaaf48f24 (diff)
Merge tag 'pull-qapi-2024-02-12' of https://repo.or.cz/qemu/armbru into staging
QAPI patches patches for 2024-02-12 # -----BEGIN PGP SIGNATURE----- # # iQJGBAABCAAwFiEENUvIs9frKmtoZ05fOHC0AOuRhlMFAmXJ4PsSHGFybWJydUBy # ZWRoYXQuY29tAAoJEDhwtADrkYZTDwsP/iEdmZmjoxMedTzec+GGl5QxfMkqLn14 # eX2jXtzLGZMjGMh4lvMaAdn0AJ3VnBOqxly14sMK6TMWGZkNKJpKF+2Cj8IKte1o # MlpS1N/7rZxew+B9HkulhS+6UFB3Jndsflm2ot4g+rRjohJCw0v0GapEqjQg6CKp # efJhiPuBSImm2MSx+n4dj8gkcFOMrgo6oc2ZpN0ypvGb4mupPpnNj6v12yZL8FUM # Enwsk+pBLQWoYxI9MFDGc0gW9ZBlEdP/nVq/PbglD06Urc241AHGYqT7XLT0oHLl # 6NA4v3N4GPdSe6oJdOHDFVR+/uPKiiyrseTdYTSGgAN8gcRtHam4WWhqSDIN3Afl # y41A9ZKkW51TpdszQ6wCdrgbTH5z6K5vnwWfVTwIgdI0mrDcAGWnc2Yr7m6c3fS8 # /Vz00J7OC0P1nXh0IeRxXExXSmaGUUgS3T/KBXPYr0PQPe7Qd+1eTQN6LaliEMRH # dRpXQabjLmztMhc5VXCv8ihwa7mNVaEn++uRrdKoWOvIQEp0ZeZfxCzp+/2mGPJ0 # YKJc7Ja260h2Y00/Zu2XiwjdzgG+h+QuJO/3OFsZIV5ftFqSBRMCHiGEfANHidld # Cpo0efeWWTPdV8BQOirGGr0qtDTmgFMFCZTJMsI/g0m9sMCv0WbTtmWNThwaI3uD # MKnEGG+KX7vD # =nhrQ # -----END PGP SIGNATURE----- # gpg: Signature made Mon 12 Feb 2024 09:12:27 GMT # gpg: using RSA key 354BC8B3D7EB2A6B68674E5F3870B400EB918653 # gpg: issuer "armbru@redhat.com" # gpg: Good signature from "Markus Armbruster <armbru@redhat.com>" [full] # gpg: aka "Markus Armbruster <armbru@pond.sub.org>" [full] # Primary key fingerprint: 354B C8B3 D7EB 2A6B 6867 4E5F 3870 B400 EB91 8653 * tag 'pull-qapi-2024-02-12' of https://repo.or.cz/qemu/armbru: MAINTAINERS: Cover qapi/stats.json MAINTAINERS: Cover qapi/cxl.json qapi/migration: Add missing tls-authz documentation qapi: Add missing union tag documentation qapi: Move @String out of common.json to discourage reuse qapi: Improve documentation of file descriptor socket addresses qapi: Plug trivial documentation holes around former simple unions qapi/dump: Clean up documentation of DumpGuestMemoryCapability qapi/yank: Clean up documentaion of yank qga/qapi-schema: Plug trivial documentation holes qga/qapi-schema: Clean up documentation of guest-set-vcpus qga/qapi-schema: Clean up documentation of guest-set-memory-blocks qapi: Require member documentation (with loophole) sphinx/qapidoc: Drop code to generate doc for simple union tag qapi: Indent tagged doc comment sections properly qapi/block-core: Fix BlockLatencyHistogramInfo doc markup docs/devel/qapi-code-gen: Tweak doc comment whitespace docs/devel/qapi-code-gen: Normalize version refs x.y.0 to just x.y Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
-rw-r--r--MAINTAINERS2
-rw-r--r--chardev/char-socket.c2
-rw-r--r--docs/devel/qapi-code-gen.rst14
-rw-r--r--docs/sphinx/qapidoc.py6
-rw-r--r--include/hw/virtio/vhost-vsock-common.h1
-rw-r--r--include/net/filter.h2
-rw-r--r--qapi/block-core.json26
-rw-r--r--qapi/block-export.json2
-rw-r--r--qapi/char.json28
-rw-r--r--qapi/common.json11
-rw-r--r--qapi/crypto.json2
-rw-r--r--qapi/dump.json2
-rw-r--r--qapi/machine.json14
-rw-r--r--qapi/migration.json52
-rw-r--r--qapi/misc.json12
-rw-r--r--qapi/net.json12
-rw-r--r--qapi/pragma.json66
-rw-r--r--qapi/qdev.json12
-rw-r--r--qapi/sockets.json48
-rw-r--r--qapi/stats.json2
-rw-r--r--qapi/tpm.json4
-rw-r--r--qapi/transaction.json2
-rw-r--r--qapi/ui.json14
-rw-r--r--qapi/yank.json4
-rw-r--r--qga/qapi-schema.json58
-rw-r--r--scripts/qapi/parser.py7
-rw-r--r--scripts/qapi/source.py2
-rw-r--r--tests/qapi-schema/doc-bad-alternate-member.json2
-rw-r--r--tests/qapi-schema/doc-good.json14
-rw-r--r--tests/qapi-schema/doc-good.out2
-rw-r--r--util/qemu-sockets.c3
31 files changed, 322 insertions, 106 deletions
diff --git a/MAINTAINERS b/MAINTAINERS
index f80db6a96a..2e09ed5595 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -2894,6 +2894,7 @@ S: Supported
F: hw/cxl/
F: hw/mem/cxl_type3.c
F: include/hw/cxl/
+F: qapi/cxl.json
Dirty Bitmaps
M: Eric Blake <eblake@redhat.com>
@@ -3320,6 +3321,7 @@ Stats
S: Orphan
F: include/sysemu/stats.h
F: stats/
+F: qapi/stats.json
Streams
M: Edgar E. Iglesias <edgar.iglesias@gmail.com>
diff --git a/chardev/char-socket.c b/chardev/char-socket.c
index 7105753815..67e3334423 100644
--- a/chardev/char-socket.c
+++ b/chardev/char-socket.c
@@ -1508,7 +1508,7 @@ static void qemu_chr_parse_socket(QemuOpts *opts, ChardevBackend *backend,
};
} else {
addr->type = SOCKET_ADDRESS_TYPE_FD;
- addr->u.fd.data = g_new(String, 1);
+ addr->u.fd.data = g_new(FdSocketAddress, 1);
addr->u.fd.data->str = g_strdup(fd);
}
sock->addr = addr;
diff --git a/docs/devel/qapi-code-gen.rst b/docs/devel/qapi-code-gen.rst
index 76be722f4c..756adc187e 100644
--- a/docs/devel/qapi-code-gen.rst
+++ b/docs/devel/qapi-code-gen.rst
@@ -167,6 +167,7 @@ Syntax::
'*doc-required': BOOL,
'*command-name-exceptions': [ STRING, ... ],
'*command-returns-exceptions': [ STRING, ... ],
+ '*documentation-exceptions': [ STRING, ... ],
'*member-name-exceptions': [ STRING, ... ] } }
The pragma directive lets you control optional generator behavior.
@@ -183,6 +184,10 @@ may contain ``"_"`` instead of ``"-"``. Default is none.
Pragma 'command-returns-exceptions' takes a list of commands that may
violate the rules on permitted return types. Default is none.
+Pragma 'documentation-exceptions' takes a list of types, commands, and
+events whose members / arguments need not be documented. Default is
+none.
+
Pragma 'member-name-exceptions' takes a list of types whose member
names may contain uppercase letters, and ``"_"`` instead of ``"-"``.
Default is none.
@@ -1019,11 +1024,11 @@ For example::
# @device: If the stats are for a virtual block device, the name
# corresponding to the virtual block device.
#
- # @node-name: The node name of the device. (since 2.3)
+ # @node-name: The node name of the device. (Since 2.3)
#
# ... more members ...
#
- # Since: 0.14.0
+ # Since: 0.14
##
{ 'struct': 'BlockStats',
'data': {'*device': 'str', '*node-name': 'str',
@@ -1035,11 +1040,12 @@ For example::
# Query the @BlockStats for all virtual block devices.
#
# @query-nodes: If true, the command will query all the block nodes
- # ... explain, explain ... (since 2.3)
+ # ... explain, explain ...
+ # (Since 2.3)
#
# Returns: A list of @BlockStats for each virtual block devices.
#
- # Since: 0.14.0
+ # Since: 0.14
#
# Example:
#
diff --git a/docs/sphinx/qapidoc.py b/docs/sphinx/qapidoc.py
index 658c288f8f..05b809af27 100644
--- a/docs/sphinx/qapidoc.py
+++ b/docs/sphinx/qapidoc.py
@@ -168,12 +168,6 @@ class QAPISchemaGenRSTVisitor(QAPISchemaVisitor):
# TODO drop fallbacks when undocumented members are outlawed
if section.text:
defn = section.text
- elif (variants and variants.tag_member == section.member
- and not section.member.type.doc_type()):
- values = section.member.type.member_names()
- defn = [nodes.Text('One of ')]
- defn.extend(intersperse([nodes.literal('', v) for v in values],
- nodes.Text(', ')))
else:
defn = [nodes.Text('Not documented')]
diff --git a/include/hw/virtio/vhost-vsock-common.h b/include/hw/virtio/vhost-vsock-common.h
index 93c782101d..75a74e8a99 100644
--- a/include/hw/virtio/vhost-vsock-common.h
+++ b/include/hw/virtio/vhost-vsock-common.h
@@ -11,6 +11,7 @@
#ifndef QEMU_VHOST_VSOCK_COMMON_H
#define QEMU_VHOST_VSOCK_COMMON_H
+#include "qapi/qapi-types-common.h"
#include "hw/virtio/virtio.h"
#include "hw/virtio/vhost.h"
#include "qom/object.h"
diff --git a/include/net/filter.h b/include/net/filter.h
index 27ffc630df..f15f7932b2 100644
--- a/include/net/filter.h
+++ b/include/net/filter.h
@@ -9,7 +9,7 @@
#ifndef QEMU_NET_FILTER_H
#define QEMU_NET_FILTER_H
-#include "qapi/qapi-types-net.h"
+#include "qapi/qapi-types-common.h"
#include "qemu/queue.h"
#include "qom/object.h"
#include "net/queue.h"
diff --git a/qapi/block-core.json b/qapi/block-core.json
index e4ef36d2aa..ab5a93a966 100644
--- a/qapi/block-core.json
+++ b/qapi/block-core.json
@@ -196,6 +196,8 @@
##
# @ImageInfoSpecificQCow2Wrapper:
#
+# @data: image information specific to QCOW2
+#
# Since: 1.7
##
{ 'struct': 'ImageInfoSpecificQCow2Wrapper',
@@ -204,6 +206,8 @@
##
# @ImageInfoSpecificVmdkWrapper:
#
+# @data: image information specific to VMDK
+#
# Since: 6.1
##
{ 'struct': 'ImageInfoSpecificVmdkWrapper',
@@ -212,6 +216,8 @@
##
# @ImageInfoSpecificLUKSWrapper:
#
+# @data: image information specific to LUKS
+#
# Since: 2.7
##
{ 'struct': 'ImageInfoSpecificLUKSWrapper',
@@ -223,6 +229,8 @@
##
# @ImageInfoSpecificRbdWrapper:
#
+# @data: image information specific to RBD
+#
# Since: 6.1
##
{ 'struct': 'ImageInfoSpecificRbdWrapper',
@@ -231,6 +239,8 @@
##
# @ImageInfoSpecificFileWrapper:
#
+# @data: image information specific to files
+#
# Since: 8.0
##
{ 'struct': 'ImageInfoSpecificFileWrapper',
@@ -242,6 +252,8 @@
# A discriminated record of image format specific information
# structures.
#
+# @type: block driver name
+#
# Since: 1.7
##
{ 'union': 'ImageInfoSpecific',
@@ -656,9 +668,7 @@
# @bins: list of io request counts corresponding to histogram
# intervals, one more element than @boundaries has. For the
# example above, @bins may be something like [3, 1, 5, 2], and
-# corresponding histogram looks like:
-#
-# ::
+# corresponding histogram looks like::
#
# 5| *
# 4| *
@@ -1094,6 +1104,8 @@
#
# Block driver specific statistics
#
+# @driver: block driver name
+#
# Since: 4.2
##
{ 'union': 'BlockStatsSpecific',
@@ -3467,6 +3479,8 @@
##
# @BlockdevQcowEncryption:
#
+# @format: encryption format
+#
# Since: 2.10
##
{ 'union': 'BlockdevQcowEncryption',
@@ -3501,6 +3515,8 @@
##
# @BlockdevQcow2Encryption:
#
+# @format: encryption format
+#
# Since: 2.10
##
{ 'union': 'BlockdevQcow2Encryption',
@@ -3651,6 +3667,8 @@
##
# @SshHostKeyCheck:
#
+# @mode: How to check the host key
+#
# Since: 2.12
##
{ 'union': 'SshHostKeyCheck',
@@ -4220,6 +4238,8 @@
##
# @RbdEncryptionCreateOptions:
#
+# @format: Encryption format.
+#
# Since: 6.1
##
{ 'union': 'RbdEncryptionCreateOptions',
diff --git a/qapi/block-export.json b/qapi/block-export.json
index e063e9255a..d9bd376b48 100644
--- a/qapi/block-export.json
+++ b/qapi/block-export.json
@@ -346,6 +346,8 @@
# Describes a block export, i.e. how single node should be exported on
# an external interface.
#
+# @type: Block export type
+#
# @id: A unique identifier for the block export (across all export
# types)
#
diff --git a/qapi/char.json b/qapi/char.json
index 6c6ad3b10c..390e3ef1b9 100644
--- a/qapi/char.json
+++ b/qapi/char.json
@@ -498,6 +498,8 @@
##
# @ChardevFileWrapper:
#
+# @data: Configuration info for file chardevs
+#
# Since: 1.4
##
{ 'struct': 'ChardevFileWrapper',
@@ -506,6 +508,8 @@
##
# @ChardevHostdevWrapper:
#
+# @data: Configuration info for device and pipe chardevs
+#
# Since: 1.4
##
{ 'struct': 'ChardevHostdevWrapper',
@@ -514,6 +518,8 @@
##
# @ChardevSocketWrapper:
#
+# @data: Configuration info for (stream) socket chardevs
+#
# Since: 1.4
##
{ 'struct': 'ChardevSocketWrapper',
@@ -522,6 +528,8 @@
##
# @ChardevUdpWrapper:
#
+# @data: Configuration info for datagram socket chardevs
+#
# Since: 1.5
##
{ 'struct': 'ChardevUdpWrapper',
@@ -530,6 +538,8 @@
##
# @ChardevCommonWrapper:
#
+# @data: Configuration shared across all chardev backends
+#
# Since: 2.6
##
{ 'struct': 'ChardevCommonWrapper',
@@ -538,6 +548,8 @@
##
# @ChardevMuxWrapper:
#
+# @data: Configuration info for mux chardevs
+#
# Since: 1.5
##
{ 'struct': 'ChardevMuxWrapper',
@@ -546,6 +558,8 @@
##
# @ChardevStdioWrapper:
#
+# @data: Configuration info for stdio chardevs
+#
# Since: 1.5
##
{ 'struct': 'ChardevStdioWrapper',
@@ -554,6 +568,8 @@
##
# @ChardevSpiceChannelWrapper:
#
+# @data: Configuration info for spice vm channel chardevs
+#
# Since: 1.5
##
{ 'struct': 'ChardevSpiceChannelWrapper',
@@ -563,6 +579,8 @@
##
# @ChardevSpicePortWrapper:
#
+# @data: Configuration info for spice port chardevs
+#
# Since: 1.5
##
{ 'struct': 'ChardevSpicePortWrapper',
@@ -572,6 +590,8 @@
##
# @ChardevQemuVDAgentWrapper:
#
+# @data: Configuration info for qemu vdagent implementation
+#
# Since: 6.1
##
{ 'struct': 'ChardevQemuVDAgentWrapper',
@@ -581,6 +601,8 @@
##
# @ChardevDBusWrapper:
#
+# @data: Configuration info for DBus chardevs
+#
# Since: 7.0
##
{ 'struct': 'ChardevDBusWrapper',
@@ -590,6 +612,8 @@
##
# @ChardevVCWrapper:
#
+# @data: Configuration info for virtual console chardevs
+#
# Since: 1.5
##
{ 'struct': 'ChardevVCWrapper',
@@ -598,6 +622,8 @@
##
# @ChardevRingbufWrapper:
#
+# @data: Configuration info for ring buffer chardevs
+#
# Since: 1.5
##
{ 'struct': 'ChardevRingbufWrapper',
@@ -608,6 +634,8 @@
#
# Configuration info for the new chardev backend.
#
+# @type: backend type
+#
# Since: 1.4
##
{ 'union': 'ChardevBackend',
diff --git a/qapi/common.json b/qapi/common.json
index 6fed9cde1a..f1bb841951 100644
--- a/qapi/common.json
+++ b/qapi/common.json
@@ -52,17 +52,6 @@
'data': [ 'on', 'off', 'split' ] }
##
-# @String:
-#
-# A fat type wrapping 'str', to be embedded in lists.
-#
-# Since: 1.2
-##
-{ 'struct': 'String',
- 'data': {
- 'str': 'str' } }
-
-##
# @StrOrNull:
#
# This is a string value or the explicit lack of a string (null
diff --git a/qapi/crypto.json b/qapi/crypto.json
index ad8dd37175..931c88e688 100644
--- a/qapi/crypto.json
+++ b/qapi/crypto.json
@@ -654,6 +654,8 @@
# The options that are available for all asymmetric key algorithms
# when creating a new QCryptoAkCipher.
#
+# @alg: encryption cipher algorithm
+#
# Since: 7.1
##
{ 'union': 'QCryptoAkCipherOptions',
diff --git a/qapi/dump.json b/qapi/dump.json
index 5cbc237ad9..1997c1d1d4 100644
--- a/qapi/dump.json
+++ b/qapi/dump.json
@@ -186,7 +186,7 @@
##
# @DumpGuestMemoryCapability:
#
-# A list of the available formats for dump-guest-memory
+# @formats: the available formats for dump-guest-memory
#
# Since: 2.0
##
diff --git a/qapi/machine.json b/qapi/machine.json
index aa99fa333f..d816c5c02e 100644
--- a/qapi/machine.json
+++ b/qapi/machine.json
@@ -443,6 +443,8 @@
#
# A discriminated record of NUMA options. (for OptsVisitor)
#
+# @type: NUMA option type
+#
# Since: 2.1
##
{ 'union': 'NumaOptions',
@@ -1396,6 +1398,8 @@
##
# @PCDIMMDeviceInfoWrapper:
#
+# @data: PCDIMMDevice state information
+#
# Since: 2.1
##
{ 'struct': 'PCDIMMDeviceInfoWrapper',
@@ -1404,6 +1408,8 @@
##
# @VirtioPMEMDeviceInfoWrapper:
#
+# @data: VirtioPMEM state information
+#
# Since: 2.1
##
{ 'struct': 'VirtioPMEMDeviceInfoWrapper',
@@ -1412,6 +1418,8 @@
##
# @VirtioMEMDeviceInfoWrapper:
#
+# @data: VirtioMEMDevice state information
+#
# Since: 2.1
##
{ 'struct': 'VirtioMEMDeviceInfoWrapper',
@@ -1420,6 +1428,8 @@
##
# @SgxEPCDeviceInfoWrapper:
#
+# @data: Sgx EPC state information
+#
# Since: 6.2
##
{ 'struct': 'SgxEPCDeviceInfoWrapper',
@@ -1428,6 +1438,8 @@
##
# @HvBalloonDeviceInfoWrapper:
#
+# @data: hv-balloon provided memory state information
+#
# Since: 8.2
##
{ 'struct': 'HvBalloonDeviceInfoWrapper',
@@ -1438,6 +1450,8 @@
#
# Union containing information about a memory device
#
+# @type: memory device type
+#
# Since: 2.1
##
{ 'union': 'MemoryDeviceInfo',
diff --git a/qapi/migration.json b/qapi/migration.json
index 819708321d..5a565d9b8d 100644
--- a/qapi/migration.json
+++ b/qapi/migration.json
@@ -980,6 +980,10 @@
# 2.9) Previously (since 2.7), this was reported by omitting
# tls-hostname instead.
#
+# @tls-authz: ID of the 'authz' object subclass that provides access
+# control checking of the TLS x509 certificate distinguished name.
+# (Since 4.0)
+#
# @max-bandwidth: to set maximum speed for migration. maximum speed
# in bytes per second. (Since 2.8)
#
@@ -1630,6 +1634,8 @@
#
# Migration endpoint configuration.
#
+# @transport: The migration stream transport mechanism
+#
# Since: 8.2
##
{ 'union': 'MigrationAddress',
@@ -1699,24 +1705,24 @@
#
# Notes:
#
-# 1. The 'query-migrate' command should be used to check migration's
-# progress and final result (this information is provided by the
-# 'status' member)
+# 1. The 'query-migrate' command should be used to check
+# migration's progress and final result (this information is
+# provided by the 'status' member)
#
-# 2. All boolean arguments default to false
+# 2. All boolean arguments default to false
#
-# 3. The user Monitor's "detach" argument is invalid in QMP and should
-# not be used
+# 3. The user Monitor's "detach" argument is invalid in QMP and
+# should not be used
#
-# 4. The uri argument should have the Uniform Resource Identifier of
-# default destination VM. This connection will be bound to default
-# network.
+# 4. The uri argument should have the Uniform Resource Identifier
+# of default destination VM. This connection will be bound to
+# default network.
#
-# 5. For now, number of migration streams is restricted to one, i.e
-# number of items in 'channels' list is just 1.
+# 5. For now, number of migration streams is restricted to one,
+# i.e number of items in 'channels' list is just 1.
#
-# 6. The 'uri' and 'channels' arguments are mutually exclusive;
-# exactly one of the two should be present.
+# 6. The 'uri' and 'channels' arguments are mutually exclusive;
+# exactly one of the two should be present.
#
# Example:
#
@@ -1781,20 +1787,20 @@
#
# Notes:
#
-# 1. It's a bad idea to use a string for the uri, but it needs
-# to stay compatible with -incoming and the format of the uri
-# is already exposed above libvirt.
+# 1. It's a bad idea to use a string for the uri, but it needs to
+# stay compatible with -incoming and the format of the uri is
+# already exposed above libvirt.
#
-# 2. QEMU must be started with -incoming defer to allow
-# migrate-incoming to be used.
+# 2. QEMU must be started with -incoming defer to allow
+# migrate-incoming to be used.
#
-# 3. The uri format is the same as for -incoming
+# 3. The uri format is the same as for -incoming
#
-# 5. For now, number of migration streams is restricted to one, i.e
-# number of items in 'channels' list is just 1.
+# 5. For now, number of migration streams is restricted to one,
+# i.e number of items in 'channels' list is just 1.
#
-# 4. The 'uri' and 'channels' arguments are mutually exclusive;
-# exactly one of the two should be present.
+# 4. The 'uri' and 'channels' arguments are mutually exclusive;
+# exactly one of the two should be present.
#
# Example:
#
diff --git a/qapi/misc.json b/qapi/misc.json
index 2ca8c39874..4108a0c951 100644
--- a/qapi/misc.json
+++ b/qapi/misc.json
@@ -348,9 +348,10 @@
# - If file descriptor was not received, GenericError
# - If @fdset-id is a negative value, GenericError
#
-# Notes: The list of fd sets is shared by all monitor connections.
+# Notes:
+# The list of fd sets is shared by all monitor connections.
#
-# If @fdset-id is not specified, a new fd set will be created.
+# If @fdset-id is not specified, a new fd set will be created.
#
# Since: 1.2
#
@@ -379,10 +380,11 @@
#
# Since: 1.2
#
-# Notes: The list of fd sets is shared by all monitor connections.
+# Notes:
+# The list of fd sets is shared by all monitor connections.
#
-# If @fd is not specified, all file descriptors in @fdset-id will be
-# removed.
+# If @fd is not specified, all file descriptors in @fdset-id will
+# be removed.
#
# Example:
#
diff --git a/qapi/net.json b/qapi/net.json
index 68493d6ac9..0a993e1a3d 100644
--- a/qapi/net.json
+++ b/qapi/net.json
@@ -6,7 +6,6 @@
# = Net devices
##
-{ 'include': 'common.json' }
{ 'include': 'sockets.json' }
##
@@ -106,6 +105,17 @@
'*vectors': 'uint32' } }
##
+# @String:
+#
+# A fat type wrapping 'str', to be embedded in lists.
+#
+# Since: 1.2
+##
+{ 'struct': 'String',
+ 'data': {
+ 'str': 'str' } }
+
+##
# @NetdevUserOptions:
#
# Use the user mode network stack which requires no administrator
diff --git a/qapi/pragma.json b/qapi/pragma.json
index 0aa4eeddd3..6929ab776e 100644
--- a/qapi/pragma.json
+++ b/qapi/pragma.json
@@ -31,6 +31,72 @@
'query-tpm-models',
'query-tpm-types',
'ringbuf-read' ],
+ # Types, commands, and events with undocumented members / arguments:
+ 'documentation-exceptions': [
+ 'AbortWrapper',
+ 'AudiodevDriver',
+ 'BlkdebugEvent',
+ 'BlockDirtyBitmapAddWrapper',
+ 'BlockDirtyBitmapMergeWrapper',
+ 'BlockDirtyBitmapWrapper',
+ 'BlockdevBackupWrapper',
+ 'BlockdevDriver',
+ 'BlockdevQcow2EncryptionFormat',
+ 'BlockdevSnapshotInternalWrapper',
+ 'BlockdevSnapshotSyncWrapper',
+ 'BlockdevSnapshotWrapper',
+ 'BlockdevVmdkAdapterType',
+ 'ChardevBackendKind',
+ 'CpuS390Entitlement',
+ 'CpuS390Polarization',
+ 'CpuS390State',
+ 'CxlCorErrorType',
+ 'DisplayProtocol',
+ 'DriveBackupWrapper',
+ 'DummyBlockCoreForceArrays',
+ 'DummyForceArrays',
+ 'DummyVirtioForceArrays',
+ 'GrabToggleKeys',
+ 'GuestPanicInformationHyperV',
+ 'HotKeyMod',
+ 'ImageInfoSpecificKind',
+ 'InputAxis',
+ 'InputButton',
+ 'InputMultiTouchEvent',
+ 'InputMultiTouchType',
+ 'IscsiHeaderDigest',
+ 'IscsiTransport',
+ 'JSONType',
+ 'KeyValueKind',
+ 'MemoryDeviceInfoKind',
+ 'NetClientDriver',
+ 'ObjectType',
+ 'PciMemoryRegion',
+ 'QCryptoAkCipherKeyType',
+ 'QCryptodevBackendServiceType',
+ 'QKeyCode',
+ 'Qcow2OverlapCheckFlags',
+ 'RbdAuthMode',
+ 'RbdImageEncryptionFormat',
+ 'StatsFilter',
+ 'StatsValue',
+ 'String',
+ 'StringWrapper',
+ 'SysEmuTarget',
+ 'ThrottleGroupProperties',
+ 'VncPrimaryAuth',
+ 'VncVencryptSubAuth',
+ 'X86CPURegister32',
+ 'XDbgBlockGraph',
+ 'YankInstanceType',
+ 'blockdev-reopen',
+ 'query-cpu-model-baseline',
+ 'query-cpu-model-comparison',
+ 'query-cpu-model-expansion',
+ 'query-rocker',
+ 'query-rocker-ports',
+ 'query-stats-schemas',
+ 'watchdog-set-action' ],
# Externally visible types whose member names may use uppercase
'member-name-exceptions': [ # visible in:
'ACPISlotType', # query-acpi-ospm-status
diff --git a/qapi/qdev.json b/qapi/qdev.json
index 25bac5e611..3b3ccfa413 100644
--- a/qapi/qdev.json
+++ b/qapi/qdev.json
@@ -53,14 +53,14 @@
#
# Notes:
#
-# 1. Additional arguments depend on the type.
+# 1. Additional arguments depend on the type.
#
-# 2. For detailed information about this command, please refer to the
-# 'docs/qdev-device-use.txt' file.
+# 2. For detailed information about this command, please refer to
+# the 'docs/qdev-device-use.txt' file.
#
-# 3. It's possible to list device properties by running QEMU with the
-# "-device DEVICE,help" command-line argument, where DEVICE is the
-# device's name
+# 3. It's possible to list device properties by running QEMU with
+# the "-device DEVICE,help" command-line argument, where DEVICE
+# is the device's name
#
# Example:
#
diff --git a/qapi/sockets.json b/qapi/sockets.json
index 6213154525..ef777928e7 100644
--- a/qapi/sockets.json
+++ b/qapi/sockets.json
@@ -5,8 +5,6 @@
# = Socket data types
##
-{ 'include': 'common.json' }
-
##
# @NetworkAddressFamily:
#
@@ -117,8 +115,28 @@
'port': 'str' } }
##
+# @FdSocketAddress:
+#
+# A file descriptor name or number.
+#
+# @str: decimal is for file descriptor number, otherwise it's a file
+# descriptor name. Named file descriptors are permitted in
+# monitor commands, in combination with the 'getfd' command.
+# Decimal file descriptors are permitted at startup or other
+# contexts where no monitor context is active.
+#
+#
+# Since: 1.2
+##
+{ 'struct': 'FdSocketAddress',
+ 'data': {
+ 'str': 'str' } }
+
+##
# @InetSocketAddressWrapper:
#
+# @data: internet domain socket address
+#
# Since: 1.3
##
{ 'struct': 'InetSocketAddressWrapper',
@@ -127,6 +145,8 @@
##
# @UnixSocketAddressWrapper:
#
+# @data: UNIX domain socket address
+#
# Since: 1.3
##
{ 'struct': 'UnixSocketAddressWrapper',
@@ -135,18 +155,22 @@
##
# @VsockSocketAddressWrapper:
#
+# @data: VSOCK domain socket address
+#
# Since: 2.8
##
{ 'struct': 'VsockSocketAddressWrapper',
'data': { 'data': 'VsockSocketAddress' } }
##
-# @StringWrapper:
+# @FdSocketAddressWrapper:
+#
+# @data: file descriptor name or number
#
# Since: 1.3
##
-{ 'struct': 'StringWrapper',
- 'data': { 'data': 'String' } }
+{ 'struct': 'FdSocketAddressWrapper',
+ 'data': { 'data': 'FdSocketAddress' } }
##
# @SocketAddressLegacy:
@@ -154,6 +178,8 @@
# Captures the address of a socket, which could also be a named file
# descriptor
#
+# @type: Transport type
+#
# Note: This type is deprecated in favor of SocketAddress. The
# difference between SocketAddressLegacy and SocketAddress is that
# the latter has fewer {} on the wire.
@@ -167,7 +193,7 @@
'inet': 'InetSocketAddressWrapper',
'unix': 'UnixSocketAddressWrapper',
'vsock': 'VsockSocketAddressWrapper',
- 'fd': 'StringWrapper' } }
+ 'fd': 'FdSocketAddressWrapper' } }
##
# @SocketAddressType:
@@ -180,11 +206,7 @@
#
# @vsock: VMCI address
#
-# @fd: decimal is for file descriptor number, otherwise a file
-# descriptor name. Named file descriptors are permitted in
-# monitor commands, in combination with the 'getfd' command.
-# Decimal file descriptors are permitted at startup or other
-# contexts where no monitor context is active.
+# @fd: Socket file descriptor
#
# Since: 2.9
##
@@ -194,7 +216,7 @@
##
# @SocketAddress:
#
-# Captures the address of a socket, which could also be a named file
+# Captures the address of a socket, which could also be a socket file
# descriptor
#
# @type: Transport type
@@ -207,4 +229,4 @@
'data': { 'inet': 'InetSocketAddress',
'unix': 'UnixSocketAddress',
'vsock': 'VsockSocketAddress',
- 'fd': 'String' } }
+ 'fd': 'FdSocketAddress' } }
diff --git a/qapi/stats.json b/qapi/stats.json
index 01791e86d5..ce9d8161ec 100644
--- a/qapi/stats.json
+++ b/qapi/stats.json
@@ -120,6 +120,8 @@
# - which providers to request statistics from
# - which named values to return within each provider
#
+# @target: the kind of objects to query
+#
# Since: 7.1
##
{ 'union': 'StatsFilter',
diff --git a/qapi/tpm.json b/qapi/tpm.json
index a754455ca5..f9c1e866e7 100644
--- a/qapi/tpm.json
+++ b/qapi/tpm.json
@@ -102,6 +102,8 @@
##
# @TPMPassthroughOptionsWrapper:
#
+# @data: Information about the TPM passthrough type
+#
# Since: 1.5
##
{ 'struct': 'TPMPassthroughOptionsWrapper',
@@ -111,6 +113,8 @@
##
# @TPMEmulatorOptionsWrapper:
#
+# @data: Information about the TPM emulator type
+#
# Since: 2.11
##
{ 'struct': 'TPMEmulatorOptionsWrapper',
diff --git a/qapi/transaction.json b/qapi/transaction.json
index cffee2de28..7a95c081e9 100644
--- a/qapi/transaction.json
+++ b/qapi/transaction.json
@@ -158,6 +158,8 @@
# A discriminated record of operations that can be performed with
# @transaction.
#
+# @type: the operation to be performed
+#
# Since: 1.1
##
{ 'union': 'TransactionAction',
diff --git a/qapi/ui.json b/qapi/ui.json
index a0158baf23..b6d7e142b7 100644
--- a/qapi/ui.json
+++ b/qapi/ui.json
@@ -990,6 +990,8 @@
##
# @IntWrapper:
#
+# @data: a numeric key code
+#
# Since: 1.3
##
{ 'struct': 'IntWrapper',
@@ -998,6 +1000,8 @@
##
# @QKeyCodeWrapper:
#
+# @data: An enumeration of key name
+#
# Since: 1.3
##
{ 'struct': 'QKeyCodeWrapper',
@@ -1008,6 +1012,8 @@
#
# Represents a keyboard key.
#
+# @type: key encoding
+#
# Since: 1.3
##
{ 'union': 'KeyValue',
@@ -1175,6 +1181,8 @@
##
# @InputKeyEventWrapper:
#
+# @data: Keyboard input event
+#
# Since: 2.0
##
{ 'struct': 'InputKeyEventWrapper',
@@ -1183,6 +1191,8 @@
##
# @InputBtnEventWrapper:
#
+# @data: Pointer button input event
+#
# Since: 2.0
##
{ 'struct': 'InputBtnEventWrapper',
@@ -1191,6 +1201,8 @@
##
# @InputMoveEventWrapper:
#
+# @data: Pointer motion input event
+#
# Since: 2.0
##
{ 'struct': 'InputMoveEventWrapper',
@@ -1199,6 +1211,8 @@
##
# @InputMultiTouchEventWrapper:
#
+# @data: MultiTouch input event
+#
# Since: 8.1
##
{ 'struct': 'InputMultiTouchEventWrapper',
diff --git a/qapi/yank.json b/qapi/yank.json
index 60eda20816..ee038a11a1 100644
--- a/qapi/yank.json
+++ b/qapi/yank.json
@@ -49,6 +49,8 @@
# A yank instance can be yanked with the @yank qmp command to recover
# from a hanging QEMU.
#
+# @type: yank instance type
+#
# Currently implemented yank instances:
#
# - nbd block device: Yanking it will shut down the connection to the
@@ -74,7 +76,7 @@
# Try to recover from hanging QEMU by yanking the specified instances.
# See @YankInstance for more information.
#
-# Takes a list of @YankInstance as argument.
+# @instances: the instances to be yanked
#
# Returns:
# - Nothing on success
diff --git a/qga/qapi-schema.json b/qga/qapi-schema.json
index 50b0a558c7..b8efe31897 100644
--- a/qga/qapi-schema.json
+++ b/qga/qapi-schema.json
@@ -33,7 +33,10 @@
'guest-get-time',
'guest-set-vcpus',
'guest-sync',
- 'guest-sync-delimited' ] } }
+ 'guest-sync-delimited' ],
+ # Types and commands with undocumented members:
+ 'documentation-exceptions': [
+ 'GuestNVMeSmart' ] } }
##
# @guest-sync-delimited:
@@ -776,14 +779,15 @@
# Attempt to reconfigure (currently: enable/disable) logical
# processors inside the guest.
#
-# The input list is processed node by node in order. In each node
-# @logical-id is used to look up the guest VCPU, for which @online
-# specifies the requested state. The set of distinct @logical-id's is
-# only required to be a subset of the guest-supported identifiers.
-# There's no restriction on list length or on repeating the same
-# @logical-id (with possibly different @online field). Preferably the
-# input list should describe a modified subset of @guest-get-vcpus'
-# return value.
+# @vcpus: The logical processors to be reconfigured. This list is
+# processed node by node in order. In each node @logical-id is
+# used to look up the guest VCPU, for which @online specifies the
+# requested state. The set of distinct @logical-id's is only
+# required to be a subset of the guest-supported identifiers.
+# There's no restriction on list length or on repeating the same
+# @logical-id (with possibly different @online field). Preferably
+# the input list should describe a modified subset of
+# @guest-get-vcpus' return value.
#
# Returns: The length of the initial sublist that has been
# successfully processed. The guest agent maximizes this value.
@@ -934,6 +938,8 @@
# NVMe smart information, based on NVMe specification, section
# <SMART / Health Information (Log Identifier 02h)>
#
+# TODO: document members briefly
+#
# Since: 7.1
##
{ 'struct': 'GuestNVMeSmart',
@@ -968,7 +974,7 @@
#
# Disk type related smart information.
#
-# - @nvme: NVMe disk smart
+# @type: disk bus type
#
# Since: 7.1
##
@@ -1163,14 +1169,16 @@
# Attempt to reconfigure (currently: enable/disable) state of memory
# blocks inside the guest.
#
-# The input list is processed node by node in order. In each node
-# @phys-index is used to look up the guest MEMORY BLOCK, for which
-# @online specifies the requested state. The set of distinct
-# @phys-index's is only required to be a subset of the guest-supported
-# identifiers. There's no restriction on list length or on repeating
-# the same @phys-index (with possibly different @online field).
-# Preferably the input list should describe a modified subset of
-# @guest-get-memory-blocks' return value.
+# @mem-blks: The memory blocks to be reconfigured. This list is
+# processed node by node in order. In each node @phys-index is
+# used to look up the guest MEMORY BLOCK, for which @online
+# specifies the requested state. The set of distinct
+# @phys-index's is only required to be a subset of the
+# guest-supported identifiers. There's no restriction on list
+# length or on repeating the same @phys-index (with possibly
+# different @online field). Preferably the input list should
+# describe a modified subset of @guest-get-memory-blocks' return
+# value.
#
# Returns: The operation results, it is a list of
# @GuestMemoryBlockResponse, which is corresponding to the input
@@ -1487,6 +1495,8 @@
##
# @GuestDeviceType:
+#
+# @pci: PCI device
##
{ 'enum': 'GuestDeviceType',
'data': [ 'pci' ] }
@@ -1506,7 +1516,9 @@
##
# @GuestDeviceId:
#
-# Id of the device - @pci: PCI ID, since: 5.2
+# Id of the device
+#
+# @type: device type
#
# Since: 5.2
##
@@ -1688,6 +1700,8 @@
# @major: major device number of disk
#
# @minor: minor device number of disk
+#
+# @stats: I/O statistics
##
{ 'struct': 'GuestDiskStatsInfo',
'data': {'name': 'str',
@@ -1711,7 +1725,9 @@
##
# @GuestCpuStatsType:
#
-# An enumeration of OS type
+# Guest operating systems supporting CPU statistics
+#
+# @linux: Linux
#
# Since: 7.1
##
@@ -1768,7 +1784,7 @@
#
# Get statistics of each CPU in millisecond.
#
-# - @linux: Linux style CPU statistics
+# @type: guest operating system
#
# Since: 7.1
##
diff --git a/scripts/qapi/parser.py b/scripts/qapi/parser.py
index 48cd55a38c..88221b3c64 100644
--- a/scripts/qapi/parser.py
+++ b/scripts/qapi/parser.py
@@ -238,6 +238,8 @@ class QAPISchemaParser:
pragma.command_name_exceptions = check_list_str(name, value)
elif name == 'command-returns-exceptions':
pragma.command_returns_exceptions = check_list_str(name, value)
+ elif name == 'documentation-exceptions':
+ pragma.documentation_exceptions = check_list_str(name, value)
elif name == 'member-name-exceptions':
pragma.member_name_exceptions = check_list_str(name, value)
else:
@@ -739,7 +741,10 @@ class QAPIDoc:
def connect_member(self, member: 'QAPISchemaMember') -> None:
if member.name not in self.args:
- # Undocumented TODO outlaw
+ if self.symbol not in member.info.pragma.documentation_exceptions:
+ raise QAPISemError(member.info,
+ "%s '%s' lacks documentation"
+ % (member.role, member.name))
self.args[member.name] = QAPIDoc.ArgSection(self._parser,
member.name)
self.args[member.name].connect(member)
diff --git a/scripts/qapi/source.py b/scripts/qapi/source.py
index 04193cc964..7b379fdc92 100644
--- a/scripts/qapi/source.py
+++ b/scripts/qapi/source.py
@@ -24,6 +24,8 @@ class QAPISchemaPragma:
self.command_name_exceptions: List[str] = []
# Commands allowed to return a non-dictionary
self.command_returns_exceptions: List[str] = []
+ # Types, commands, and events with undocumented members
+ self.documentation_exceptions: List[str] = []
# Types whose member names may violate case conventions
self.member_name_exceptions: List[str] = []
diff --git a/tests/qapi-schema/doc-bad-alternate-member.json b/tests/qapi-schema/doc-bad-alternate-member.json
index fa4143da4c..37593b6698 100644
--- a/tests/qapi-schema/doc-bad-alternate-member.json
+++ b/tests/qapi-schema/doc-bad-alternate-member.json
@@ -2,6 +2,8 @@
##
# @AorB:
+# @a: a
+# @b: b
# @aa: a
# @bb: b
##
diff --git a/tests/qapi-schema/doc-good.json b/tests/qapi-schema/doc-good.json
index 354dfdf461..24a84fe6d7 100644
--- a/tests/qapi-schema/doc-good.json
+++ b/tests/qapi-schema/doc-good.json
@@ -3,7 +3,9 @@
#
# Positive QAPI doc comment tests
-{ 'pragma': { 'doc-required': true } }
+{ 'pragma': {
+ 'doc-required': true,
+ 'documentation-exceptions': [ 'Enum', 'Variant1', 'Alternate', 'cmd' ] } }
##
# = Section
@@ -73,8 +75,8 @@
# @Base:
#
# @base1:
-# description starts on a new line,
-# not indented
+# description starts on a new line,
+# minimally indented
##
{ 'struct': 'Base', 'data': { 'base1': 'Enum' },
'if': { 'all': ['IFALL1', 'IFALL2'] } }
@@ -155,10 +157,10 @@
# TODO: frobnicate
# Notes:
#
-# - Lorem ipsum dolor sit amet
-# - Ut enim ad minim veniam
+# - Lorem ipsum dolor sit amet
+# - Ut enim ad minim veniam
#
-# Duis aute irure dolor
+# Duis aute irure dolor
# Example:
#
# -> in
diff --git a/tests/qapi-schema/doc-good.out b/tests/qapi-schema/doc-good.out
index 24d9ea954d..34ee74af4b 100644
--- a/tests/qapi-schema/doc-good.out
+++ b/tests/qapi-schema/doc-good.out
@@ -118,7 +118,7 @@ doc symbol=Base
arg=base1
description starts on a new line,
-not indented
+minimally indented
doc symbol=Variant1
body=
A paragraph
diff --git a/util/qemu-sockets.c b/util/qemu-sockets.c
index 83e84b1186..60c44b2b56 100644
--- a/util/qemu-sockets.c
+++ b/util/qemu-sockets.c
@@ -1464,7 +1464,8 @@ SocketAddress *socket_address_flatten(SocketAddressLegacy *addr_legacy)
break;
case SOCKET_ADDRESS_TYPE_FD:
addr->type = SOCKET_ADDRESS_TYPE_FD;
- QAPI_CLONE_MEMBERS(String, &addr->u.fd, addr_legacy->u.fd.data);
+ QAPI_CLONE_MEMBERS(FdSocketAddress, &addr->u.fd,
+ addr_legacy->u.fd.data);
break;
default:
abort();