#
# @name: the name of the property
#
-# @type: the type of the property. This will typically come in one of four
-# forms:
+# @type: the type of the property. This will typically come in one of
+# four forms:
#
-# 1) A primitive type such as 'u8', 'u16', 'bool', 'str', or 'double'.
-# These types are mapped to the appropriate JSON type.
+# 1) A primitive type such as 'u8', 'u16', 'bool', 'str', or
+# 'double'. These types are mapped to the appropriate JSON
+# type.
#
-# 2) A child type in the form 'child<subtype>' where subtype is a qdev
-# device type name. Child properties create the composition tree.
+# 2) A child type in the form 'child<subtype>' where subtype is a
+# qdev device type name. Child properties create the
+# composition tree.
#
-# 3) A link type in the form 'link<subtype>' where subtype is a qdev
-# device type name. Link properties form the device model graph.
+# 3) A link type in the form 'link<subtype>' where subtype is a
+# qdev device type name. Link properties form the device model
+# graph.
#
# @description: if specified, the description of the property.
#
##
# @qom-list:
#
-# This command will list any properties of a object given a path in the object
-# model.
+# This command will list any properties of a object given a path in
+# the object model.
#
-# @path: the path within the object model. See @qom-get for a description of
-# this parameter.
+# @path: the path within the object model. See @qom-get for a
+# description of this parameter.
#
-# Returns: a list of @ObjectPropertyInfo that describe the properties of the
-# object.
+# Returns: a list of @ObjectPropertyInfo that describe the properties
+# of the object.
#
# Since: 1.2
#
# { "name": "parallel0", "type": "child<chardev-vc>" },
# { "name": "serial0", "type": "child<chardev-vc>" },
# { "name": "mon0", "type": "child<chardev-stdio>" } ] }
-#
##
{ 'command': 'qom-list',
'data': { 'path': 'str' },
##
# @qom-get:
#
-# This command will get a property from a object model path and return the
-# value.
+# This command will get a property from a object model path and return
+# the value.
#
-# @path: The path within the object model. There are two forms of supported
-# paths--absolute and partial paths.
+# @path: The path within the object model. There are two forms of
+# supported paths--absolute and partial paths.
#
-# Absolute paths are derived from the root object and can follow child<>
-# or link<> properties. Since they can follow link<> properties, they
-# can be arbitrarily long. Absolute paths look like absolute filenames
-# and are prefixed with a leading slash.
+# Absolute paths are derived from the root object and can follow
+# child<> or link<> properties. Since they can follow link<>
+# properties, they can be arbitrarily long. Absolute paths look
+# like absolute filenames and are prefixed with a leading slash.
#
-# Partial paths look like relative filenames. They do not begin
-# with a prefix. The matching rules for partial paths are subtle but
-# designed to make specifying objects easy. At each level of the
-# composition tree, the partial path is matched as an absolute path.
-# The first match is not returned. At least two matches are searched
-# for. A successful result is only returned if only one match is
-# found. If more than one match is found, a flag is return to
-# indicate that the match was ambiguous.
+# Partial paths look like relative filenames. They do not begin
+# with a prefix. The matching rules for partial paths are subtle
+# but designed to make specifying objects easy. At each level of
+# the composition tree, the partial path is matched as an absolute
+# path. The first match is not returned. At least two matches
+# are searched for. A successful result is only returned if only
+# one match is found. If more than one match is found, a flag is
+# return to indicate that the match was ambiguous.
#
# @property: The property name to read
#
-# Returns: The property value. The type depends on the property
-# type. child<> and link<> properties are returned as #str
-# pathnames. All integer property types (u8, u16, etc) are
-# returned as #int.
+# Returns: The property value. The type depends on the property type.
+# child<> and link<> properties are returned as #str pathnames.
+# All integer property types (u8, u16, etc) are returned as #int.
#
# Since: 1.2
#
-# Example:
+# Examples:
#
# 1. Use absolute path
#
# "arguments": { "path": "unattached/sysbus",
# "property": "type" } }
# <- { "return": "System" }
-#
##
{ 'command': 'qom-get',
'data': { 'path': 'str', 'property': 'str' },
#
# @property: the property name to set
#
-# @value: a value who's type is appropriate for the property type. See @qom-get
-# for a description of type mapping.
+# @value: a value who's type is appropriate for the property type.
+# See @qom-get for a description of type mapping.
#
# Since: 1.2
#
# "property": "graphics",
# "value": false } }
# <- { "return": {} }
-#
##
{ 'command': 'qom-set',
'data': { 'path': 'str', 'property': 'str', 'value': 'any' },
# @name: the type name found in the search
#
# @abstract: the type is abstract and can't be directly instantiated.
-# Omitted if false. (since 2.10)
+# Omitted if false. (since 2.10)
#
# @parent: Name of parent type, if any (since 2.10)
#
#
# This command will return a list of types given search parameters
#
-# @implements: if specified, only return types that implement this type name
+# @implements: if specified, only return types that implement this
+# type name
#
# @abstract: if true, include abstract types in the results
#
-# Returns: a list of @ObjectTypeInfo or an empty list if no results are found
+# Returns: a list of @ObjectTypeInfo or an empty list if no results
+# are found
#
# Since: 1.1
##
#
# @typename: the type name of an object
#
-# Note: objects can create properties at runtime, for example to describe
-# links between different devices and/or objects. These properties
-# are not included in the output of this command.
+# Note: objects can create properties at runtime, for example to
+# describe links between different devices and/or objects. These
+# properties are not included in the output of this command.
#
# Returns: a list of ObjectPropertyInfo describing object properties
#
#
# @if: interface name of the host system CAN bus to connect to
#
-# @canbus: object ID of the can-bus object to connect to the host interface
+# @canbus: object ID of the can-bus object to connect to the host
+# interface
#
# Since: 2.12
##
#
# Properties for colo-compare objects.
#
-# @primary_in: name of the character device backend to use for the primary
-# input (incoming packets are redirected to @outdev)
+# @primary_in: name of the character device backend to use for the
+# primary input (incoming packets are redirected to @outdev)
#
-# @secondary_in: name of the character device backend to use for secondary
-# input (incoming packets are only compared to the input on
-# @primary_in and then dropped)
+# @secondary_in: name of the character device backend to use for
+# secondary input (incoming packets are only compared to the input
+# on @primary_in and then dropped)
#
# @outdev: name of the character device backend to use for output
#
# @iothread: name of the iothread to run in
#
-# @notify_dev: name of the character device backend to be used to communicate
-# with the remote colo-frame (only for Xen COLO)
+# @notify_dev: name of the character device backend to be used to
+# communicate with the remote colo-frame (only for Xen COLO)
#
-# @compare_timeout: the maximum time to hold a packet from @primary_in for
-# comparison with an incoming packet on @secondary_in in
-# milliseconds (default: 3000)
+# @compare_timeout: the maximum time to hold a packet from @primary_in
+# for comparison with an incoming packet on @secondary_in in
+# milliseconds (default: 3000)
#
-# @expired_scan_cycle: the interval at which colo-compare checks whether
-# packets from @primary have timed out, in milliseconds
-# (default: 3000)
+# @expired_scan_cycle: the interval at which colo-compare checks
+# whether packets from @primary have timed out, in milliseconds
+# (default: 3000)
#
-# @max_queue_size: the maximum number of packets to keep in the queue for
-# comparing with incoming packets from @secondary_in. If the
-# queue is full and additional packets are received, the
-# additional packets are dropped. (default: 1024)
+# @max_queue_size: the maximum number of packets to keep in the queue
+# for comparing with incoming packets from @secondary_in. If the
+# queue is full and additional packets are received, the
+# additional packets are dropped. (default: 1024)
#
-# @vnet_hdr_support: if true, vnet header support is enabled (default: false)
+# @vnet_hdr_support: if true, vnet header support is enabled
+# (default: false)
#
# Since: 2.8
##
##
# @CryptodevBackendProperties:
#
-# Properties for cryptodev-backend and cryptodev-backend-builtin objects.
+# Properties for cryptodev-backend and cryptodev-backend-builtin
+# objects.
+#
+# @queues: the number of queues for the cryptodev backend. Ignored
+# for cryptodev-backend and must be 1 for
+# cryptodev-backend-builtin. (default: 1)
#
-# @queues: the number of queues for the cryptodev backend. Ignored for
-# cryptodev-backend and must be 1 for cryptodev-backend-builtin.
-# (default: 1)
+# @throttle-bps: limit total bytes per second (Since 8.0)
+#
+# @throttle-ops: limit total operations per second (Since 8.0)
#
# Since: 2.8
##
{ 'struct': 'CryptodevBackendProperties',
- 'data': { '*queues': 'uint32' } }
+ 'data': { '*queues': 'uint32',
+ '*throttle-bps': 'uint64',
+ '*throttle-ops': 'uint64' } }
##
# @CryptodevVhostUserProperties:
#
# Properties for cryptodev-vhost-user objects.
#
-# @chardev: the name of a Unix domain socket character device that connects to
-# the vhost-user server
+# @chardev: the name of a Unix domain socket character device that
+# connects to the vhost-user server
#
# Since: 2.12
##
#
# @addr: the name of the DBus bus to connect to
#
-# @id-list: a comma separated list of DBus IDs of helpers whose data should be
-# included in the VM state on migration
+# @id-list: a comma separated list of DBus IDs of helpers whose data
+# should be included in the VM state on migration
#
# Since: 5.0
##
##
# @NetfilterInsert:
#
-# Indicates where to insert a netfilter relative to a given other filter.
+# Indicates where to insert a netfilter relative to a given other
+# filter.
#
# @before: insert before the specified filter
#
#
# @queue: indicates which queue(s) to filter (default: all)
#
-# @status: indicates whether the filter is enabled ("on") or disabled ("off")
-# (default: "on")
+# @status: indicates whether the filter is enabled ("on") or disabled
+# ("off") (default: "on")
#
-# @position: specifies where the filter should be inserted in the filter list.
-# "head" means the filter is inserted at the head of the filter list,
-# before any existing filters.
-# "tail" means the filter is inserted at the tail of the filter list,
-# behind any existing filters (default).
-# "id=<id>" means the filter is inserted before or behind the filter
-# specified by <id>, depending on the @insert property.
-# (default: "tail")
+# @position: specifies where the filter should be inserted in the
+# filter list. "head" means the filter is inserted at the head of
+# the filter list, before any existing filters. "tail" means the
+# filter is inserted at the tail of the filter list, behind any
+# existing filters (default). "id=<id>" means the filter is
+# inserted before or behind the filter specified by <id>,
+# depending on the @insert property. (default: "tail")
#
-# @insert: where to insert the filter relative to the filter given in @position.
-# Ignored if @position is "head" or "tail". (default: behind)
+# @insert: where to insert the filter relative to the filter given in
+# @position. Ignored if @position is "head" or "tail".
+# (default: behind)
#
# Since: 2.5
##
#
# Properties for filter-buffer objects.
#
-# @interval: a non-zero interval in microseconds. All packets arriving in the
-# given interval are delayed until the end of the interval.
+# @interval: a non-zero interval in microseconds. All packets
+# arriving in the given interval are delayed until the end of the
+# interval.
#
# Since: 2.5
##
#
# @file: the filename where the dumped packets should be stored
#
-# @maxlen: maximum number of bytes in a packet that are stored (default: 65536)
+# @maxlen: maximum number of bytes in a packet that are stored
+# (default: 65536)
#
# Since: 2.5
##
#
# Properties for filter-mirror objects.
#
-# @outdev: the name of a character device backend to which all incoming packets
-# are mirrored
+# @outdev: the name of a character device backend to which all
+# incoming packets are mirrored
#
-# @vnet_hdr_support: if true, vnet header support is enabled (default: false)
+# @vnet_hdr_support: if true, vnet header support is enabled
+# (default: false)
#
# Since: 2.6
##
#
# Properties for filter-redirector objects.
#
-# At least one of @indev or @outdev must be present. If both are present, they
-# must not refer to the same character device backend.
+# At least one of @indev or @outdev must be present. If both are
+# present, they must not refer to the same character device backend.
#
-# @indev: the name of a character device backend from which packets are
-# received and redirected to the filtered network device
+# @indev: the name of a character device backend from which packets
+# are received and redirected to the filtered network device
#
-# @outdev: the name of a character device backend to which all incoming packets
-# are redirected
+# @outdev: the name of a character device backend to which all
+# incoming packets are redirected
#
-# @vnet_hdr_support: if true, vnet header support is enabled (default: false)
+# @vnet_hdr_support: if true, vnet header support is enabled
+# (default: false)
#
# Since: 2.6
##
#
# Properties for filter-rewriter objects.
#
-# @vnet_hdr_support: if true, vnet header support is enabled (default: false)
+# @vnet_hdr_support: if true, vnet header support is enabled
+# (default: false)
#
# Since: 2.8
##
#
# Properties for input-barrier objects.
#
-# @name: the screen name as declared in the screens section of barrier.conf
+# @name: the screen name as declared in the screens section of
+# barrier.conf
#
# @server: hostname of the Barrier server (default: "localhost")
#
# @port: TCP port of the Barrier server (default: "24800")
#
# @x-origin: x coordinate of the leftmost pixel on the guest screen
-# (default: "0")
+# (default: "0")
#
# @y-origin: y coordinate of the topmost pixel on the guest screen
-# (default: "0")
+# (default: "0")
#
# @width: the width of secondary screen in pixels (default: "1920")
#
#
# @evdev: the path of the host evdev device to use
#
-# @grab_all: if true, grab is toggled for all devices (e.g. both keyboard and
-# mouse) instead of just one device (default: false)
+# @grab_all: if true, grab is toggled for all devices (e.g. both
+# keyboard and mouse) instead of just one device (default: false)
#
# @repeat: enables auto-repeat events (default: false)
#
# @grab-toggle: the key or key combination that toggles device grab
-# (default: ctrl-ctrl)
+# (default: ctrl-ctrl)
#
# Since: 2.6
##
'*repeat': 'bool',
'*grab-toggle': 'GrabToggleKeys' } }
+##
+# @EventLoopBaseProperties:
+#
+# Common properties for event loops
+#
+# @aio-max-batch: maximum number of requests in a batch for the AIO
+# engine, 0 means that the engine will use its default.
+# (default: 0)
+#
+# @thread-pool-min: minimum number of threads reserved in the thread
+# pool (default:0)
+#
+# @thread-pool-max: maximum number of threads the thread pool can
+# contain (default:64)
+#
+# Since: 7.1
+##
+{ 'struct': 'EventLoopBaseProperties',
+ 'data': { '*aio-max-batch': 'int',
+ '*thread-pool-min': 'int',
+ '*thread-pool-max': 'int' } }
+
##
# @IothreadProperties:
#
# Properties for iothread objects.
#
-# @poll-max-ns: the maximum number of nanoseconds to busy wait for events.
-# 0 means polling is disabled (default: 32768 on POSIX hosts,
-# 0 otherwise)
+# @poll-max-ns: the maximum number of nanoseconds to busy wait for
+# events. 0 means polling is disabled (default: 32768 on POSIX
+# hosts, 0 otherwise)
#
-# @poll-grow: the multiplier used to increase the polling time when the
-# algorithm detects it is missing events due to not polling long
-# enough. 0 selects a default behaviour (default: 0)
+# @poll-grow: the multiplier used to increase the polling time when
+# the algorithm detects it is missing events due to not polling
+# long enough. 0 selects a default behaviour (default: 0)
#
# @poll-shrink: the divisor used to decrease the polling time when the
-# algorithm detects it is spending too long polling without
-# encountering events. 0 selects a default behaviour (default: 0)
+# algorithm detects it is spending too long polling without
+# encountering events. 0 selects a default behaviour (default: 0)
+#
+# The @aio-max-batch option is available since 6.1.
#
# Since: 2.0
##
{ 'struct': 'IothreadProperties',
+ 'base': 'EventLoopBaseProperties',
'data': { '*poll-max-ns': 'int',
'*poll-grow': 'int',
'*poll-shrink': 'int' } }
+##
+# @MainLoopProperties:
+#
+# Properties for the main-loop object.
+#
+# Since: 7.1
+##
+{ 'struct': 'MainLoopProperties',
+ 'base': 'EventLoopBaseProperties',
+ 'data': {} }
+
##
# @MemoryBackendProperties:
#
# Properties for objects of classes derived from memory-backend.
#
-# @merge: if true, mark the memory as mergeable (default depends on the machine
-# type)
+# @merge: if true, mark the memory as mergeable (default depends on
+# the machine type)
#
-# @dump: if true, include the memory in core dumps (default depends on the
-# machine type)
+# @dump: if true, include the memory in core dumps (default depends on
+# the machine type)
#
# @host-nodes: the list of NUMA host nodes to bind the memory to
#
#
# @prealloc: if true, preallocate memory (default: false)
#
-# @prealloc-threads: number of CPU threads to use for prealloc (default: 1)
+# @prealloc-threads: number of CPU threads to use for prealloc
+# (default: 1)
+#
+# @prealloc-context: thread context to use for creation of
+# preallocation threads (default: none) (since 7.2)
+#
+# @share: if false, the memory is private to QEMU; if true, it is
+# shared (default: false)
#
-# @share: if false, the memory is private to QEMU; if true, it is shared
-# (default: false)
+# @reserve: if true, reserve swap space (or huge pages) if applicable
+# (default: true) (since 6.1)
#
# @size: size of the memory region in bytes
#
-# @x-use-canonical-path-for-ramblock-id: if true, the canoncial path is used
-# for ramblock-id. Disable this for 4.0
-# machine types or older to allow
-# migration with newer QEMU versions.
-# This option is considered stable
-# despite the x- prefix. (default:
-# false generally, but true for machine
-# types <= 4.0)
+# @x-use-canonical-path-for-ramblock-id: if true, the canonical path
+# is used for ramblock-id. Disable this for 4.0 machine types or
+# older to allow migration with newer QEMU versions.
+# (default: false generally, but true for machine types <= 4.0)
+#
+# Note: prealloc=true and reserve=false cannot be set at the same
+# time. With reserve=true, the behavior depends on the operating
+# system: for example, Linux will not reserve swap space for
+# shared file mappings -- "not applicable". In contrast,
+# reserve=false will bail out if it cannot be configured
+# accordingly.
#
# Since: 2.1
##
'*policy': 'HostMemPolicy',
'*prealloc': 'bool',
'*prealloc-threads': 'uint32',
+ '*prealloc-context': 'str',
'*share': 'bool',
+ '*reserve': 'bool',
'size': 'size',
'*x-use-canonical-path-for-ramblock-id': 'bool' } }
#
# Properties for memory-backend-file objects.
#
-# @align: the base address alignment when QEMU mmap(2)s @mem-path. Some
-# backend stores specified by @mem-path require an alignment different
-# than the default one used by QEMU, e.g. the device DAX /dev/dax0.0
-# requires 2M alignment rather than 4K. In such cases, users can
-# specify the required alignment via this option.
-# 0 selects a default alignment (currently the page size). (default: 0)
-#
-# @discard-data: if true, the file contents can be destroyed when QEMU exits,
-# to avoid unnecessarily flushing data to the backing file. Note
-# that ``discard-data`` is only an optimization, and QEMU might
-# not discard file contents if it aborts unexpectedly or is
-# terminated using SIGKILL. (default: false)
-#
-# @mem-path: the path to either a shared memory or huge page filesystem mount
-#
-# @pmem: specifies whether the backing file specified by @mem-path is in
-# host persistent memory that can be accessed using the SNIA NVM
-# programming model (e.g. Intel NVDIMM).
-#
-# @readonly: if true, the backing file is opened read-only; if false, it is
-# opened read-write. (default: false)
+# @align: the base address alignment when QEMU mmap(2)s @mem-path.
+# Some backend stores specified by @mem-path require an alignment
+# different than the default one used by QEMU, e.g. the device DAX
+# /dev/dax0.0 requires 2M alignment rather than 4K. In such cases,
+# users can specify the required alignment via this option. 0
+# selects a default alignment (currently the page size).
+# (default: 0)
+#
+# @offset: the offset into the target file that the region starts at.
+# You can use this option to back multiple regions with a single
+# file. Must be a multiple of the page size.
+# (default: 0) (since 8.1)
+#
+# @discard-data: if true, the file contents can be destroyed when QEMU
+# exits, to avoid unnecessarily flushing data to the backing file.
+# Note that @discard-data is only an optimization, and QEMU might
+# not discard file contents if it aborts unexpectedly or is
+# terminated using SIGKILL. (default: false)
+#
+# @mem-path: the path to either a shared memory or huge page
+# filesystem mount
+#
+# @pmem: specifies whether the backing file specified by @mem-path is
+# in host persistent memory that can be accessed using the SNIA
+# NVM programming model (e.g. Intel NVDIMM).
+#
+# @readonly: if true, the backing file is opened read-only; if false,
+# it is opened read-write. (default: false)
+#
+# @rom: whether to create Read Only Memory (ROM) that cannot be modified
+# by the VM. Any write attempts to such ROM will be denied. Most
+# use cases want writable RAM instead of ROM. However, selected use
+# cases, like R/O NVDIMMs, can benefit from ROM. If set to 'on',
+# create ROM; if set to 'off', create writable RAM; if set to
+# 'auto', the value of the @readonly property is used. This
+# property is primarily helpful when we want to have proper RAM in
+# configurations that would traditionally create ROM before this
+# property was introduced: VM templating, where we want to open a
+# file readonly (@readonly set to true) and mark the memory to be
+# private for QEMU (@share set to false). For this use case, we need
+# writable RAM instead of ROM, and want to set this property to 'off'.
+# (default: auto, since 8.2)
#
# Since: 2.1
##
{ 'struct': 'MemoryBackendFileProperties',
'base': 'MemoryBackendProperties',
'data': { '*align': 'size',
+ '*offset': 'size',
'*discard-data': 'bool',
'mem-path': 'str',
- '*pmem': { 'type': 'bool', 'if': 'defined(CONFIG_LIBPMEM)' },
- '*readonly': 'bool' } }
+ '*pmem': { 'type': 'bool', 'if': 'CONFIG_LIBPMEM' },
+ '*readonly': 'bool',
+ '*rom': 'OnOffAuto' } }
##
# @MemoryBackendMemfdProperties:
#
# The @share boolean option is true by default with memfd.
#
-# @hugetlb: if true, the file to be created resides in the hugetlbfs filesystem
-# (default: false)
+# @hugetlb: if true, the file to be created resides in the hugetlbfs
+# filesystem (default: false)
#
-# @hugetlbsize: the hugetlb page size on systems that support multiple hugetlb
-# page sizes (it must be a power of 2 value supported by the
-# system). 0 selects a default page size. This option is ignored
-# if @hugetlb is false. (default: 0)
+# @hugetlbsize: the hugetlb page size on systems that support multiple
+# hugetlb page sizes (it must be a power of 2 value supported by
+# the system). 0 selects a default page size. This option is
+# ignored if @hugetlb is false. (default: 0)
#
-# @seal: if true, create a sealed-file, which will block further resizing of
-# the memory (default: true)
+# @seal: if true, create a sealed-file, which will block further
+# resizing of the memory (default: true)
#
# Since: 2.12
##
'*hugetlbsize': 'size',
'*seal': 'bool' } }
+##
+# @MemoryBackendEpcProperties:
+#
+# Properties for memory-backend-epc objects.
+#
+# The @share boolean option is true by default with epc
+#
+# The @merge boolean option is false by default with epc
+#
+# The @dump boolean option is false by default with epc
+#
+# Since: 6.2
+##
+{ 'struct': 'MemoryBackendEpcProperties',
+ 'base': 'MemoryBackendProperties',
+ 'data': {} }
+
##
# @PrManagerHelperProperties:
#
# Properties for pr-manager-helper objects.
#
-# @path: the path to a Unix domain socket for connecting to the external helper
+# @path: the path to a Unix domain socket for connecting to the
+# external helper
#
# Since: 2.11
##
{ 'struct': 'PrManagerHelperProperties',
'data': { 'path': 'str' } }
+##
+# @QtestProperties:
+#
+# Properties for qtest objects.
+#
+# @chardev: the chardev to be used to receive qtest commands on.
+#
+# @log: the path to a log file
+#
+# Since: 6.0
+##
+{ 'struct': 'QtestProperties',
+ 'data': { 'chardev': 'str',
+ '*log': 'str' } }
+
##
# @RemoteObjectProperties:
#
#
# @fd: file descriptor name previously passed via 'getfd' command
#
-# @devid: the id of the device to be associated with the file descriptor
+# @devid: the id of the device to be associated with the file
+# descriptor
#
# Since: 6.0
##
{ 'struct': 'RemoteObjectProperties',
'data': { 'fd': 'str', 'devid': 'str' } }
+##
+# @VfioUserServerProperties:
+#
+# Properties for x-vfio-user-server objects.
+#
+# @socket: socket to be used by the libvfio-user library
+#
+# @device: the ID of the device to be emulated at the server
+#
+# Since: 7.1
+##
+{ 'struct': 'VfioUserServerProperties',
+ 'data': { 'socket': 'SocketAddress', 'device': 'str' } }
+
##
# @RngProperties:
#
# Properties for objects of classes derived from rng.
#
-# @opened: if true, the device is opened immediately when applying this option
-# and will probably fail when processing the next option. Don't use;
-# only provided for compatibility. (default: false)
+# @opened: if true, the device is opened immediately when applying
+# this option and will probably fail when processing the next
+# option. Don't use; only provided for compatibility.
+# (default: false)
#
# Features:
-# @deprecated: Member @opened is deprecated. Setting true doesn't make sense,
-# and false is already the default.
+#
+# @deprecated: Member @opened is deprecated. Setting true doesn't
+# make sense, and false is already the default.
#
# Since: 1.3
##
#
# Properties for rng-egd objects.
#
-# @chardev: the name of a character device backend that provides the connection
-# to the RNG daemon
+# @chardev: the name of a character device backend that provides the
+# connection to the RNG daemon
#
# Since: 1.3
##
#
# Properties for rng-random objects.
#
-# @filename: the filename of the device on the host to obtain entropy from
-# (default: "/dev/urandom")
+# @filename: the filename of the device on the host to obtain entropy
+# from (default: "/dev/urandom")
#
# Since: 1.3
##
# @cbitpos: C-bit location in page table entry (default: 0)
#
# @reduced-phys-bits: number of bits in physical addresses that become
-# unavailable when SEV is enabled
+# unavailable when SEV is enabled
+#
+# @kernel-hashes: if true, add hashes of kernel/initrd/cmdline to a
+# designated guest firmware page for measured boot with -kernel
+# (default: false) (since 6.2)
#
# Since: 2.12
##
'*policy': 'uint32',
'*handle': 'uint32',
'*cbitpos': 'uint32',
- 'reduced-phys-bits': 'uint32' } }
+ 'reduced-phys-bits': 'uint32',
+ '*kernel-hashes': 'bool' } }
+
+##
+# @ThreadContextProperties:
+#
+# Properties for thread context objects.
+#
+# @cpu-affinity: the list of host CPU numbers used as CPU affinity for
+# all threads created in the thread context (default: QEMU main
+# thread CPU affinity)
+#
+# @node-affinity: the list of host node numbers that will be resolved
+# to a list of host CPU numbers used as CPU affinity. This is a
+# shortcut for specifying the list of host CPU numbers belonging
+# to the host nodes manually by setting @cpu-affinity.
+# (default: QEMU main thread affinity)
+#
+# Since: 7.2
+##
+{ 'struct': 'ThreadContextProperties',
+ 'data': { '*cpu-affinity': ['uint16'],
+ '*node-affinity': ['uint16'] } }
+
##
# @ObjectType:
#
+# Features:
+#
+# @unstable: Member @x-remote-object is experimental.
+#
# Since: 6.0
##
{ 'enum': 'ObjectType',
'authz-pam',
'authz-simple',
'can-bus',
- 'can-host-socketcan',
+ { 'name': 'can-host-socketcan',
+ 'if': 'CONFIG_LINUX' },
'colo-compare',
'cryptodev-backend',
'cryptodev-backend-builtin',
+ 'cryptodev-backend-lkcf',
{ 'name': 'cryptodev-vhost-user',
- 'if': 'defined(CONFIG_VHOST_CRYPTO)' },
+ 'if': 'CONFIG_VHOST_CRYPTO' },
'dbus-vmstate',
'filter-buffer',
'filter-dump',
'filter-replay',
'filter-rewriter',
'input-barrier',
- 'input-linux',
+ { 'name': 'input-linux',
+ 'if': 'CONFIG_LINUX' },
'iothread',
+ 'main-loop',
+ { 'name': 'memory-backend-epc',
+ 'if': 'CONFIG_LINUX' },
'memory-backend-file',
{ 'name': 'memory-backend-memfd',
- 'if': 'defined(CONFIG_LINUX)' },
+ 'if': 'CONFIG_LINUX' },
'memory-backend-ram',
'pef-guest',
- 'pr-manager-helper',
+ { 'name': 'pr-manager-helper',
+ 'if': 'CONFIG_LINUX' },
+ 'qtest',
'rng-builtin',
'rng-egd',
- 'rng-random',
+ { 'name': 'rng-random',
+ 'if': 'CONFIG_POSIX' },
'secret',
- 'secret_keyring',
+ { 'name': 'secret_keyring',
+ 'if': 'CONFIG_SECRET_KEYRING' },
'sev-guest',
+ 'thread-context',
's390-pv-guest',
'throttle-group',
'tls-creds-anon',
'tls-creds-psk',
'tls-creds-x509',
'tls-cipher-suites',
- 'x-remote-object'
+ { 'name': 'x-remote-object', 'features': [ 'unstable' ] },
+ { 'name': 'x-vfio-user-server', 'features': [ 'unstable' ] }
] }
##
'authz-listfile': 'AuthZListFileProperties',
'authz-pam': 'AuthZPAMProperties',
'authz-simple': 'AuthZSimpleProperties',
- 'can-host-socketcan': 'CanHostSocketcanProperties',
+ 'can-host-socketcan': { 'type': 'CanHostSocketcanProperties',
+ 'if': 'CONFIG_LINUX' },
'colo-compare': 'ColoCompareProperties',
'cryptodev-backend': 'CryptodevBackendProperties',
'cryptodev-backend-builtin': 'CryptodevBackendProperties',
+ 'cryptodev-backend-lkcf': 'CryptodevBackendProperties',
'cryptodev-vhost-user': { 'type': 'CryptodevVhostUserProperties',
- 'if': 'defined(CONFIG_VHOST_CRYPTO)' },
+ 'if': 'CONFIG_VHOST_CRYPTO' },
'dbus-vmstate': 'DBusVMStateProperties',
'filter-buffer': 'FilterBufferProperties',
'filter-dump': 'FilterDumpProperties',
'filter-replay': 'NetfilterProperties',
'filter-rewriter': 'FilterRewriterProperties',
'input-barrier': 'InputBarrierProperties',
- 'input-linux': 'InputLinuxProperties',
+ 'input-linux': { 'type': 'InputLinuxProperties',
+ 'if': 'CONFIG_LINUX' },
'iothread': 'IothreadProperties',
+ 'main-loop': 'MainLoopProperties',
+ 'memory-backend-epc': { 'type': 'MemoryBackendEpcProperties',
+ 'if': 'CONFIG_LINUX' },
'memory-backend-file': 'MemoryBackendFileProperties',
'memory-backend-memfd': { 'type': 'MemoryBackendMemfdProperties',
- 'if': 'defined(CONFIG_LINUX)' },
+ 'if': 'CONFIG_LINUX' },
'memory-backend-ram': 'MemoryBackendProperties',
- 'pr-manager-helper': 'PrManagerHelperProperties',
+ 'pr-manager-helper': { 'type': 'PrManagerHelperProperties',
+ 'if': 'CONFIG_LINUX' },
+ 'qtest': 'QtestProperties',
'rng-builtin': 'RngProperties',
'rng-egd': 'RngEgdProperties',
- 'rng-random': 'RngRandomProperties',
+ 'rng-random': { 'type': 'RngRandomProperties',
+ 'if': 'CONFIG_POSIX' },
'secret': 'SecretProperties',
- 'secret_keyring': 'SecretKeyringProperties',
+ 'secret_keyring': { 'type': 'SecretKeyringProperties',
+ 'if': 'CONFIG_SECRET_KEYRING' },
'sev-guest': 'SevGuestProperties',
+ 'thread-context': 'ThreadContextProperties',
'throttle-group': 'ThrottleGroupProperties',
'tls-creds-anon': 'TlsCredsAnonProperties',
'tls-creds-psk': 'TlsCredsPskProperties',
'tls-creds-x509': 'TlsCredsX509Properties',
'tls-cipher-suites': 'TlsCredsProperties',
- 'x-remote-object': 'RemoteObjectProperties'
+ 'x-remote-object': 'RemoteObjectProperties',
+ 'x-vfio-user-server': 'VfioUserServerProperties'
} }
##
#
# Create a QOM object.
#
-# Returns: Nothing on success
-# Error if @qom-type is not a valid class name
+# Returns: Nothing on success Error if @qom-type is not a valid class
+# name
#
# Since: 2.0
#
# "arguments": { "qom-type": "rng-random", "id": "rng1",
# "filename": "/dev/hwrng" } }
# <- { "return": {} }
-#
##
-{ 'command': 'object-add', 'data': 'ObjectOptions', 'boxed': true }
+{ 'command': 'object-add', 'data': 'ObjectOptions', 'boxed': true,
+ 'allow-preconfig': true }
##
# @object-del:
#
# @id: the name of the QOM object to remove
#
-# Returns: Nothing on success
-# Error if @id is not a valid id for a QOM object
+# Returns: Nothing on success Error if @id is not a valid id for a QOM
+# object
#
# Since: 2.0
#
#
# -> { "execute": "object-del", "arguments": { "id": "rng1" } }
# <- { "return": {} }
-#
##
-{ 'command': 'object-del', 'data': {'id': 'str'} }
+{ 'command': 'object-del', 'data': {'id': 'str'},
+ 'allow-preconfig': true }