mirror of
https://github.com/xemu-project/xemu.git
synced 2024-11-27 05:20:50 +00:00
1ee7bb5bef
This new command shows the information of a VirtQueue element. [Note: Up until v10 of this patch series, virtio.json had many (15+) enums defined (e.g. decoded device features, statuses, etc.). In v10 most of these enums were removed and replaced with string literals. By doing this we get (1) simpler schema, (2) smaller generated code, and (3) less maintenance burden for when new things are added (e.g. devices, device features, etc.).] Signed-off-by: Laurent Vivier <lvivier@redhat.com> Signed-off-by: Jonah Palmer <jonah.palmer@oracle.com> Message-Id: <1660220684-24909-6-git-send-email-jonah.palmer@oracle.com> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
955 lines
29 KiB
Python
955 lines
29 KiB
Python
# -*- Mode: Python -*-
|
|
# vim: filetype=python
|
|
#
|
|
|
|
##
|
|
# = Virtio devices
|
|
##
|
|
|
|
##
|
|
# @VirtioInfo:
|
|
#
|
|
# Basic information about a given VirtIODevice
|
|
#
|
|
# @path: The VirtIODevice's canonical QOM path
|
|
#
|
|
# @name: Name of the VirtIODevice
|
|
#
|
|
# Since: 7.1
|
|
#
|
|
##
|
|
{ 'struct': 'VirtioInfo',
|
|
'data': { 'path': 'str',
|
|
'name': 'str' } }
|
|
|
|
##
|
|
# @x-query-virtio:
|
|
#
|
|
# Returns a list of all realized VirtIODevices
|
|
#
|
|
# Features:
|
|
# @unstable: This command is meant for debugging.
|
|
#
|
|
# Returns: List of gathered VirtIODevices
|
|
#
|
|
# Since: 7.1
|
|
#
|
|
# Example:
|
|
#
|
|
# -> { "execute": "x-query-virtio" }
|
|
# <- { "return": [
|
|
# {
|
|
# "name": "virtio-input",
|
|
# "path": "/machine/peripheral-anon/device[4]/virtio-backend"
|
|
# },
|
|
# {
|
|
# "name": "virtio-crypto",
|
|
# "path": "/machine/peripheral/crypto0/virtio-backend"
|
|
# },
|
|
# {
|
|
# "name": "virtio-scsi",
|
|
# "path": "/machine/peripheral-anon/device[2]/virtio-backend"
|
|
# },
|
|
# {
|
|
# "name": "virtio-net",
|
|
# "path": "/machine/peripheral-anon/device[1]/virtio-backend"
|
|
# },
|
|
# {
|
|
# "name": "virtio-serial",
|
|
# "path": "/machine/peripheral-anon/device[0]/virtio-backend"
|
|
# }
|
|
# ]
|
|
# }
|
|
#
|
|
##
|
|
|
|
{ 'command': 'x-query-virtio',
|
|
'returns': [ 'VirtioInfo' ],
|
|
'features': [ 'unstable' ] }
|
|
|
|
##
|
|
# @VhostStatus:
|
|
#
|
|
# Information about a vhost device. This information will only be
|
|
# displayed if the vhost device is active.
|
|
#
|
|
# @n-mem-sections: vhost_dev n_mem_sections
|
|
#
|
|
# @n-tmp-sections: vhost_dev n_tmp_sections
|
|
#
|
|
# @nvqs: vhost_dev nvqs (number of virtqueues being used)
|
|
#
|
|
# @vq-index: vhost_dev vq_index
|
|
#
|
|
# @features: vhost_dev features
|
|
#
|
|
# @acked-features: vhost_dev acked_features
|
|
#
|
|
# @backend-features: vhost_dev backend_features
|
|
#
|
|
# @protocol-features: vhost_dev protocol_features
|
|
#
|
|
# @max-queues: vhost_dev max_queues
|
|
#
|
|
# @backend-cap: vhost_dev backend_cap
|
|
#
|
|
# @log-enabled: vhost_dev log_enabled flag
|
|
#
|
|
# @log-size: vhost_dev log_size
|
|
#
|
|
# Since: 7.1
|
|
#
|
|
##
|
|
|
|
{ 'struct': 'VhostStatus',
|
|
'data': { 'n-mem-sections': 'int',
|
|
'n-tmp-sections': 'int',
|
|
'nvqs': 'uint32',
|
|
'vq-index': 'int',
|
|
'features': 'VirtioDeviceFeatures',
|
|
'acked-features': 'VirtioDeviceFeatures',
|
|
'backend-features': 'VirtioDeviceFeatures',
|
|
'protocol-features': 'VhostDeviceProtocols',
|
|
'max-queues': 'uint64',
|
|
'backend-cap': 'uint64',
|
|
'log-enabled': 'bool',
|
|
'log-size': 'uint64' } }
|
|
|
|
##
|
|
# @VirtioStatus:
|
|
#
|
|
# Full status of the virtio device with most VirtIODevice members.
|
|
# Also includes the full status of the corresponding vhost device
|
|
# if the vhost device is active.
|
|
#
|
|
# @name: VirtIODevice name
|
|
#
|
|
# @device-id: VirtIODevice ID
|
|
#
|
|
# @vhost-started: VirtIODevice vhost_started flag
|
|
#
|
|
# @guest-features: VirtIODevice guest_features
|
|
#
|
|
# @host-features: VirtIODevice host_features
|
|
#
|
|
# @backend-features: VirtIODevice backend_features
|
|
#
|
|
# @device-endian: VirtIODevice device_endian
|
|
#
|
|
# @num-vqs: VirtIODevice virtqueue count. This is the number of active
|
|
# virtqueues being used by the VirtIODevice.
|
|
#
|
|
# @status: VirtIODevice configuration status (VirtioDeviceStatus)
|
|
#
|
|
# @isr: VirtIODevice ISR
|
|
#
|
|
# @queue-sel: VirtIODevice queue_sel
|
|
#
|
|
# @vm-running: VirtIODevice vm_running flag
|
|
#
|
|
# @broken: VirtIODevice broken flag
|
|
#
|
|
# @disabled: VirtIODevice disabled flag
|
|
#
|
|
# @use-started: VirtIODevice use_started flag
|
|
#
|
|
# @started: VirtIODevice started flag
|
|
#
|
|
# @start-on-kick: VirtIODevice start_on_kick flag
|
|
#
|
|
# @disable-legacy-check: VirtIODevice disabled_legacy_check flag
|
|
#
|
|
# @bus-name: VirtIODevice bus_name
|
|
#
|
|
# @use-guest-notifier-mask: VirtIODevice use_guest_notifier_mask flag
|
|
#
|
|
# @vhost-dev: Corresponding vhost device info for a given VirtIODevice.
|
|
# Present if the given VirtIODevice has an active vhost
|
|
# device.
|
|
#
|
|
# Since: 7.1
|
|
#
|
|
##
|
|
|
|
{ 'struct': 'VirtioStatus',
|
|
'data': { 'name': 'str',
|
|
'device-id': 'uint16',
|
|
'vhost-started': 'bool',
|
|
'device-endian': 'str',
|
|
'guest-features': 'VirtioDeviceFeatures',
|
|
'host-features': 'VirtioDeviceFeatures',
|
|
'backend-features': 'VirtioDeviceFeatures',
|
|
'num-vqs': 'int',
|
|
'status': 'VirtioDeviceStatus',
|
|
'isr': 'uint8',
|
|
'queue-sel': 'uint16',
|
|
'vm-running': 'bool',
|
|
'broken': 'bool',
|
|
'disabled': 'bool',
|
|
'use-started': 'bool',
|
|
'started': 'bool',
|
|
'start-on-kick': 'bool',
|
|
'disable-legacy-check': 'bool',
|
|
'bus-name': 'str',
|
|
'use-guest-notifier-mask': 'bool',
|
|
'*vhost-dev': 'VhostStatus' } }
|
|
|
|
##
|
|
# @x-query-virtio-status:
|
|
#
|
|
# Poll for a comprehensive status of a given virtio device
|
|
#
|
|
# @path: Canonical QOM path of the VirtIODevice
|
|
#
|
|
# Features:
|
|
# @unstable: This command is meant for debugging.
|
|
#
|
|
# Returns: VirtioStatus of the virtio device
|
|
#
|
|
# Since: 7.1
|
|
#
|
|
# Examples:
|
|
#
|
|
# 1. Poll for the status of virtio-crypto (no vhost-crypto active)
|
|
#
|
|
# -> { "execute": "x-query-virtio-status",
|
|
# "arguments": { "path": "/machine/peripheral/crypto0/virtio-backend" }
|
|
# }
|
|
# <- { "return": {
|
|
# "device-endian": "little",
|
|
# "bus-name": "",
|
|
# "disable-legacy-check": false,
|
|
# "name": "virtio-crypto",
|
|
# "started": true,
|
|
# "device-id": 20,
|
|
# "backend-features": {
|
|
# "transports": [],
|
|
# "dev-features": []
|
|
# },
|
|
# "start-on-kick": false,
|
|
# "isr": 1,
|
|
# "broken": false,
|
|
# "status": {
|
|
# "statuses": [
|
|
# "VIRTIO_CONFIG_S_ACKNOWLEDGE: Valid virtio device found",
|
|
# "VIRTIO_CONFIG_S_DRIVER: Guest OS compatible with device",
|
|
# "VIRTIO_CONFIG_S_FEATURES_OK: Feature negotiation complete",
|
|
# "VIRTIO_CONFIG_S_DRIVER_OK: Driver setup and ready"
|
|
# ]
|
|
# },
|
|
# "num-vqs": 2,
|
|
# "guest-features": {
|
|
# "dev-features": [],
|
|
# "transports": [
|
|
# "VIRTIO_RING_F_EVENT_IDX: Used & avail. event fields enabled",
|
|
# "VIRTIO_RING_F_INDIRECT_DESC: Indirect descriptors supported",
|
|
# "VIRTIO_F_VERSION_1: Device compliant for v1 spec (legacy)"
|
|
# ]
|
|
# },
|
|
# "host-features": {
|
|
# "unknown-dev-features": 1073741824,
|
|
# "dev-features": [],
|
|
# "transports": [
|
|
# "VIRTIO_RING_F_EVENT_IDX: Used & avail. event fields enabled",
|
|
# "VIRTIO_RING_F_INDIRECT_DESC: Indirect descriptors supported",
|
|
# "VIRTIO_F_VERSION_1: Device compliant for v1 spec (legacy)",
|
|
# "VIRTIO_F_ANY_LAYOUT: Device accepts arbitrary desc. layouts",
|
|
# "VIRTIO_F_NOTIFY_ON_EMPTY: Notify when device runs out of avail. descs. on VQ"
|
|
# ]
|
|
# },
|
|
# "use-guest-notifier-mask": true,
|
|
# "vm-running": true,
|
|
# "queue-sel": 1,
|
|
# "disabled": false,
|
|
# "vhost-started": false,
|
|
# "use-started": true
|
|
# }
|
|
# }
|
|
#
|
|
# 2. Poll for the status of virtio-net (vhost-net is active)
|
|
#
|
|
# -> { "execute": "x-query-virtio-status",
|
|
# "arguments": { "path": "/machine/peripheral-anon/device[1]/virtio-backend" }
|
|
# }
|
|
# <- { "return": {
|
|
# "device-endian": "little",
|
|
# "bus-name": "",
|
|
# "disabled-legacy-check": false,
|
|
# "name": "virtio-net",
|
|
# "started": true,
|
|
# "device-id": 1,
|
|
# "vhost-dev": {
|
|
# "n-tmp-sections": 4,
|
|
# "n-mem-sections": 4,
|
|
# "max-queues": 1,
|
|
# "backend-cap": 2,
|
|
# "log-size": 0,
|
|
# "backend-features": {
|
|
# "dev-features": [],
|
|
# "transports": []
|
|
# },
|
|
# "nvqs": 2,
|
|
# "protocol-features": {
|
|
# "protocols": []
|
|
# },
|
|
# "vq-index": 0,
|
|
# "log-enabled": false,
|
|
# "acked-features": {
|
|
# "dev-features": [
|
|
# "VIRTIO_NET_F_MRG_RXBUF: Driver can merge receive buffers"
|
|
# ],
|
|
# "transports": [
|
|
# "VIRTIO_RING_F_EVENT_IDX: Used & avail. event fields enabled",
|
|
# "VIRTIO_RING_F_INDIRECT_DESC: Indirect descriptors supported",
|
|
# "VIRTIO_F_VERSION_1: Device compliant for v1 spec (legacy)"
|
|
# ]
|
|
# },
|
|
# "features": {
|
|
# "dev-features": [
|
|
# "VHOST_F_LOG_ALL: Logging write descriptors supported",
|
|
# "VIRTIO_NET_F_MRG_RXBUF: Driver can merge receive buffers"
|
|
# ],
|
|
# "transports": [
|
|
# "VIRTIO_RING_F_EVENT_IDX: Used & avail. event fields enabled",
|
|
# "VIRTIO_RING_F_INDIRECT_DESC: Indirect descriptors supported",
|
|
# "VIRTIO_F_IOMMU_PLATFORM: Device can be used on IOMMU platform",
|
|
# "VIRTIO_F_VERSION_1: Device compliant for v1 spec (legacy)",
|
|
# "VIRTIO_F_ANY_LAYOUT: Device accepts arbitrary desc. layouts",
|
|
# "VIRTIO_F_NOTIFY_ON_EMPTY: Notify when device runs out of avail. descs. on VQ"
|
|
# ]
|
|
# }
|
|
# },
|
|
# "backend-features": {
|
|
# "dev-features": [
|
|
# "VHOST_USER_F_PROTOCOL_FEATURES: Vhost-user protocol features negotation supported",
|
|
# "VIRTIO_NET_F_GSO: Handling GSO-type packets supported",
|
|
# "VIRTIO_NET_F_CTRL_MAC_ADDR: MAC address set through control channel",
|
|
# "VIRTIO_NET_F_GUEST_ANNOUNCE: Driver sending gratuitous packets supported",
|
|
# "VIRTIO_NET_F_CTRL_RX_EXTRA: Extra RX mode control supported",
|
|
# "VIRTIO_NET_F_CTRL_VLAN: Control channel VLAN filtering supported",
|
|
# "VIRTIO_NET_F_CTRL_RX: Control channel RX mode supported",
|
|
# "VIRTIO_NET_F_CTRL_VQ: Control channel available",
|
|
# "VIRTIO_NET_F_STATUS: Configuration status field available",
|
|
# "VIRTIO_NET_F_MRG_RXBUF: Driver can merge receive buffers",
|
|
# "VIRTIO_NET_F_HOST_UFO: Device can receive UFO",
|
|
# "VIRTIO_NET_F_HOST_ECN: Device can receive TSO with ECN",
|
|
# "VIRTIO_NET_F_HOST_TSO6: Device can receive TSOv6",
|
|
# "VIRTIO_NET_F_HOST_TSO4: Device can receive TSOv4",
|
|
# "VIRTIO_NET_F_GUEST_UFO: Driver can receive UFO",
|
|
# "VIRTIO_NET_F_GUEST_ECN: Driver can receive TSO with ECN",
|
|
# "VIRTIO_NET_F_GUEST_TSO6: Driver can receive TSOv6",
|
|
# "VIRTIO_NET_F_GUEST_TSO4: Driver can receive TSOv4",
|
|
# "VIRTIO_NET_F_MAC: Device has given MAC address",
|
|
# "VIRTIO_NET_F_CTRL_GUEST_OFFLOADS: Control channel offloading reconfig. supported",
|
|
# "VIRTIO_NET_F_GUEST_CSUM: Driver handling packets with partial checksum supported",
|
|
# "VIRTIO_NET_F_CSUM: Device handling packets with partial checksum supported"
|
|
# ],
|
|
# "transports": [
|
|
# "VIRTIO_RING_F_EVENT_IDX: Used & avail. event fields enabled",
|
|
# "VIRTIO_RING_F_INDIRECT_DESC: Indirect descriptors supported",
|
|
# "VIRTIO_F_VERSION_1: Device compliant for v1 spec (legacy)",
|
|
# "VIRTIO_F_ANY_LAYOUT: Device accepts arbitrary desc. layouts",
|
|
# "VIRTIO_F_NOTIFY_ON_EMPTY: Notify when device runs out of avail. descs. on VQ"
|
|
# ]
|
|
# },
|
|
# "start-on-kick": false,
|
|
# "isr": 1,
|
|
# "broken": false,
|
|
# "status": {
|
|
# "statuses": [
|
|
# "VIRTIO_CONFIG_S_ACKNOWLEDGE: Valid virtio device found",
|
|
# "VIRTIO_CONFIG_S_DRIVER: Guest OS compatible with device",
|
|
# "VIRTIO_CONFIG_S_FEATURES_OK: Feature negotiation complete",
|
|
# "VIRTIO_CONFIG_S_DRIVER_OK: Driver setup and ready"
|
|
# ]
|
|
# },
|
|
# "num-vqs": 3,
|
|
# "guest-features": {
|
|
# "dev-features": [
|
|
# "VIRTIO_NET_F_CTRL_MAC_ADDR: MAC address set through control channel",
|
|
# "VIRTIO_NET_F_GUEST_ANNOUNCE: Driver sending gratuitous packets supported",
|
|
# "VIRTIO_NET_F_CTRL_VLAN: Control channel VLAN filtering supported",
|
|
# "VIRTIO_NET_F_CTRL_RX: Control channel RX mode supported",
|
|
# "VIRTIO_NET_F_CTRL_VQ: Control channel available",
|
|
# "VIRTIO_NET_F_STATUS: Configuration status field available",
|
|
# "VIRTIO_NET_F_MRG_RXBUF: Driver can merge receive buffers",
|
|
# "VIRTIO_NET_F_HOST_UFO: Device can receive UFO",
|
|
# "VIRTIO_NET_F_HOST_ECN: Device can receive TSO with ECN",
|
|
# "VIRTIO_NET_F_HOST_TSO6: Device can receive TSOv6",
|
|
# "VIRTIO_NET_F_HOST_TSO4: Device can receive TSOv4",
|
|
# "VIRTIO_NET_F_GUEST_UFO: Driver can receive UFO",
|
|
# "VIRTIO_NET_F_GUEST_ECN: Driver can receive TSO with ECN",
|
|
# "VIRTIO_NET_F_GUEST_TSO6: Driver can receive TSOv6",
|
|
# "VIRTIO_NET_F_GUEST_TSO4: Driver can receive TSOv4",
|
|
# "VIRTIO_NET_F_MAC: Device has given MAC address",
|
|
# "VIRTIO_NET_F_CTRL_GUEST_OFFLOADS: Control channel offloading reconfig. supported",
|
|
# "VIRTIO_NET_F_GUEST_CSUM: Driver handling packets with partial checksum supported",
|
|
# "VIRTIO_NET_F_CSUM: Device handling packets with partial checksum supported"
|
|
# ],
|
|
# "transports": [
|
|
# "VIRTIO_RING_F_EVENT_IDX: Used & avail. event fields enabled",
|
|
# "VIRTIO_RING_F_INDIRECT_DESC: Indirect descriptors supported",
|
|
# "VIRTIO_F_VERSION_1: Device compliant for v1 spec (legacy)"
|
|
# ]
|
|
# },
|
|
# "host-features": {
|
|
# "dev-features": [
|
|
# "VHOST_USER_F_PROTOCOL_FEATURES: Vhost-user protocol features negotation supported",
|
|
# "VIRTIO_NET_F_GSO: Handling GSO-type packets supported",
|
|
# "VIRTIO_NET_F_CTRL_MAC_ADDR: MAC address set through control channel",
|
|
# "VIRTIO_NET_F_GUEST_ANNOUNCE: Driver sending gratuitous packets supported",
|
|
# "VIRTIO_NET_F_CTRL_RX_EXTRA: Extra RX mode control supported",
|
|
# "VIRTIO_NET_F_CTRL_VLAN: Control channel VLAN filtering supported",
|
|
# "VIRTIO_NET_F_CTRL_RX: Control channel RX mode supported",
|
|
# "VIRTIO_NET_F_CTRL_VQ: Control channel available",
|
|
# "VIRTIO_NET_F_STATUS: Configuration status field available",
|
|
# "VIRTIO_NET_F_MRG_RXBUF: Driver can merge receive buffers",
|
|
# "VIRTIO_NET_F_HOST_UFO: Device can receive UFO",
|
|
# "VIRTIO_NET_F_HOST_ECN: Device can receive TSO with ECN",
|
|
# "VIRTIO_NET_F_HOST_TSO6: Device can receive TSOv6",
|
|
# "VIRTIO_NET_F_HOST_TSO4: Device can receive TSOv4",
|
|
# "VIRTIO_NET_F_GUEST_UFO: Driver can receive UFO",
|
|
# "VIRTIO_NET_F_GUEST_ECN: Driver can receive TSO with ECN",
|
|
# "VIRTIO_NET_F_GUEST_TSO6: Driver can receive TSOv6",
|
|
# "VIRTIO_NET_F_GUEST_TSO4: Driver can receive TSOv4",
|
|
# "VIRTIO_NET_F_MAC: Device has given MAC address",
|
|
# "VIRTIO_NET_F_CTRL_GUEST_OFFLOADS: Control channel offloading reconfig. supported",
|
|
# "VIRTIO_NET_F_GUEST_CSUM: Driver handling packets with partial checksum supported",
|
|
# "VIRTIO_NET_F_CSUM: Device handling packets with partial checksum supported"
|
|
# ],
|
|
# "transports": [
|
|
# "VIRTIO_RING_F_EVENT_IDX: Used & avail. event fields enabled",
|
|
# "VIRTIO_RING_F_INDIRECT_DESC: Indirect descriptors supported",
|
|
# "VIRTIO_F_VERSION_1: Device compliant for v1 spec (legacy)",
|
|
# "VIRTIO_F_ANY_LAYOUT: Device accepts arbitrary desc. layouts",
|
|
# "VIRTIO_F_NOTIFY_ON_EMPTY: Notify when device runs out of avail. descs. on VQ"
|
|
# ]
|
|
# },
|
|
# "use-guest-notifier-mask": true,
|
|
# "vm-running": true,
|
|
# "queue-sel": 2,
|
|
# "disabled": false,
|
|
# "vhost-started": true,
|
|
# "use-started": true
|
|
# }
|
|
# }
|
|
#
|
|
##
|
|
|
|
{ 'command': 'x-query-virtio-status',
|
|
'data': { 'path': 'str' },
|
|
'returns': 'VirtioStatus',
|
|
'features': [ 'unstable' ] }
|
|
|
|
##
|
|
# @VirtioDeviceStatus:
|
|
#
|
|
# A structure defined to list the configuration statuses of a virtio
|
|
# device
|
|
#
|
|
# @statuses: List of decoded configuration statuses of the virtio
|
|
# device
|
|
#
|
|
# @unknown-statuses: Virtio device statuses bitmap that have not been decoded
|
|
#
|
|
# Since: 7.1
|
|
##
|
|
|
|
{ 'struct': 'VirtioDeviceStatus',
|
|
'data': { 'statuses': [ 'str' ],
|
|
'*unknown-statuses': 'uint8' } }
|
|
|
|
##
|
|
# @VhostDeviceProtocols:
|
|
#
|
|
# A structure defined to list the vhost user protocol features of a
|
|
# Vhost User device
|
|
#
|
|
# @protocols: List of decoded vhost user protocol features of a vhost
|
|
# user device
|
|
#
|
|
# @unknown-protocols: Vhost user device protocol features bitmap that
|
|
# have not been decoded
|
|
#
|
|
# Since: 7.1
|
|
##
|
|
|
|
{ 'struct': 'VhostDeviceProtocols',
|
|
'data': { 'protocols': [ 'str' ],
|
|
'*unknown-protocols': 'uint64' } }
|
|
|
|
##
|
|
# @VirtioDeviceFeatures:
|
|
#
|
|
# The common fields that apply to most Virtio devices. Some devices
|
|
# may not have their own device-specific features (e.g. virtio-rng).
|
|
#
|
|
# @transports: List of transport features of the virtio device
|
|
#
|
|
# @dev-features: List of device-specific features (if the device has
|
|
# unique features)
|
|
#
|
|
# @unknown-dev-features: Virtio device features bitmap that have not
|
|
# been decoded
|
|
#
|
|
# Since: 7.1
|
|
##
|
|
|
|
{ 'struct': 'VirtioDeviceFeatures',
|
|
'data': { 'transports': [ 'str' ],
|
|
'*dev-features': [ 'str' ],
|
|
'*unknown-dev-features': 'uint64' } }
|
|
|
|
##
|
|
# @VirtQueueStatus:
|
|
#
|
|
# Information of a VirtIODevice VirtQueue, including most members of
|
|
# the VirtQueue data structure.
|
|
#
|
|
# @name: Name of the VirtIODevice that uses this VirtQueue
|
|
#
|
|
# @queue-index: VirtQueue queue_index
|
|
#
|
|
# @inuse: VirtQueue inuse
|
|
#
|
|
# @vring-num: VirtQueue vring.num
|
|
#
|
|
# @vring-num-default: VirtQueue vring.num_default
|
|
#
|
|
# @vring-align: VirtQueue vring.align
|
|
#
|
|
# @vring-desc: VirtQueue vring.desc (descriptor area)
|
|
#
|
|
# @vring-avail: VirtQueue vring.avail (driver area)
|
|
#
|
|
# @vring-used: VirtQueue vring.used (device area)
|
|
#
|
|
# @last-avail-idx: VirtQueue last_avail_idx or return of vhost_dev
|
|
# vhost_get_vring_base (if vhost active)
|
|
#
|
|
# @shadow-avail-idx: VirtQueue shadow_avail_idx
|
|
#
|
|
# @used-idx: VirtQueue used_idx
|
|
#
|
|
# @signalled-used: VirtQueue signalled_used
|
|
#
|
|
# @signalled-used-valid: VirtQueue signalled_used_valid flag
|
|
#
|
|
# Since: 7.1
|
|
#
|
|
##
|
|
|
|
{ 'struct': 'VirtQueueStatus',
|
|
'data': { 'name': 'str',
|
|
'queue-index': 'uint16',
|
|
'inuse': 'uint32',
|
|
'vring-num': 'uint32',
|
|
'vring-num-default': 'uint32',
|
|
'vring-align': 'uint32',
|
|
'vring-desc': 'uint64',
|
|
'vring-avail': 'uint64',
|
|
'vring-used': 'uint64',
|
|
'*last-avail-idx': 'uint16',
|
|
'*shadow-avail-idx': 'uint16',
|
|
'used-idx': 'uint16',
|
|
'signalled-used': 'uint16',
|
|
'signalled-used-valid': 'bool' } }
|
|
|
|
##
|
|
# @x-query-virtio-queue-status:
|
|
#
|
|
# Return the status of a given VirtIODevice's VirtQueue
|
|
#
|
|
# @path: VirtIODevice canonical QOM path
|
|
#
|
|
# @queue: VirtQueue index to examine
|
|
#
|
|
# Features:
|
|
# @unstable: This command is meant for debugging.
|
|
#
|
|
# Returns: VirtQueueStatus of the VirtQueue
|
|
#
|
|
# Notes: last_avail_idx will not be displayed in the case where
|
|
# the selected VirtIODevice has a running vhost device and
|
|
# the VirtIODevice VirtQueue index (queue) does not exist for
|
|
# the corresponding vhost device vhost_virtqueue. Also,
|
|
# shadow_avail_idx will not be displayed in the case where
|
|
# the selected VirtIODevice has a running vhost device.
|
|
#
|
|
# Since: 7.1
|
|
#
|
|
# Examples:
|
|
#
|
|
# 1. Get VirtQueueStatus for virtio-vsock (vhost-vsock running)
|
|
#
|
|
# -> { "execute": "x-query-virtio-queue-status",
|
|
# "arguments": { "path": "/machine/peripheral/vsock0/virtio-backend",
|
|
# "queue": 1 }
|
|
# }
|
|
# <- { "return": {
|
|
# "signalled-used": 0,
|
|
# "inuse": 0,
|
|
# "name": "vhost-vsock",
|
|
# "vring-align": 4096,
|
|
# "vring-desc": 5217370112,
|
|
# "signalled-used-valid": false,
|
|
# "vring-num-default": 128,
|
|
# "vring-avail": 5217372160,
|
|
# "queue-index": 1,
|
|
# "last-avail-idx": 0,
|
|
# "vring-used": 5217372480,
|
|
# "used-idx": 0,
|
|
# "vring-num": 128
|
|
# }
|
|
# }
|
|
#
|
|
# 2. Get VirtQueueStatus for virtio-serial (no vhost)
|
|
#
|
|
# -> { "execute": "x-query-virtio-queue-status",
|
|
# "arguments": { "path": "/machine/peripheral-anon/device[0]/virtio-backend",
|
|
# "queue": 20 }
|
|
# }
|
|
# <- { "return": {
|
|
# "signalled-used": 0,
|
|
# "inuse": 0,
|
|
# "name": "virtio-serial",
|
|
# "vring-align": 4096,
|
|
# "vring-desc": 5182074880,
|
|
# "signalled-used-valid": false,
|
|
# "vring-num-default": 128,
|
|
# "vring-avail": 5182076928,
|
|
# "queue-index": 20,
|
|
# "last-avail-idx": 0,
|
|
# "vring-used": 5182077248,
|
|
# "used-idx": 0,
|
|
# "shadow-avail-idx": 0,
|
|
# "vring-num": 128
|
|
# }
|
|
# }
|
|
#
|
|
##
|
|
|
|
{ 'command': 'x-query-virtio-queue-status',
|
|
'data': { 'path': 'str', 'queue': 'uint16' },
|
|
'returns': 'VirtQueueStatus',
|
|
'features': [ 'unstable' ] }
|
|
|
|
##
|
|
# @VirtVhostQueueStatus:
|
|
#
|
|
# Information of a vhost device's vhost_virtqueue, including most
|
|
# members of the vhost_dev vhost_virtqueue data structure.
|
|
#
|
|
# @name: Name of the VirtIODevice that uses this vhost_virtqueue
|
|
#
|
|
# @kick: vhost_virtqueue kick
|
|
#
|
|
# @call: vhost_virtqueue call
|
|
#
|
|
# @desc: vhost_virtqueue desc
|
|
#
|
|
# @avail: vhost_virtqueue avail
|
|
#
|
|
# @used: vhost_virtqueue used
|
|
#
|
|
# @num: vhost_virtqueue num
|
|
#
|
|
# @desc-phys: vhost_virtqueue desc_phys (descriptor area phys. addr.)
|
|
#
|
|
# @desc-size: vhost_virtqueue desc_size
|
|
#
|
|
# @avail-phys: vhost_virtqueue avail_phys (driver area phys. addr.)
|
|
#
|
|
# @avail-size: vhost_virtqueue avail_size
|
|
#
|
|
# @used-phys: vhost_virtqueue used_phys (device area phys. addr.)
|
|
#
|
|
# @used-size: vhost_virtqueue used_size
|
|
#
|
|
# Since: 7.1
|
|
#
|
|
##
|
|
|
|
{ 'struct': 'VirtVhostQueueStatus',
|
|
'data': { 'name': 'str',
|
|
'kick': 'int',
|
|
'call': 'int',
|
|
'desc': 'uint64',
|
|
'avail': 'uint64',
|
|
'used': 'uint64',
|
|
'num': 'int',
|
|
'desc-phys': 'uint64',
|
|
'desc-size': 'uint32',
|
|
'avail-phys': 'uint64',
|
|
'avail-size': 'uint32',
|
|
'used-phys': 'uint64',
|
|
'used-size': 'uint32' } }
|
|
|
|
##
|
|
# @x-query-virtio-vhost-queue-status:
|
|
#
|
|
# Return information of a given vhost device's vhost_virtqueue
|
|
#
|
|
# @path: VirtIODevice canonical QOM path
|
|
#
|
|
# @queue: vhost_virtqueue index to examine
|
|
#
|
|
# Features:
|
|
# @unstable: This command is meant for debugging.
|
|
#
|
|
# Returns: VirtVhostQueueStatus of the vhost_virtqueue
|
|
#
|
|
# Since: 7.1
|
|
#
|
|
# Examples:
|
|
#
|
|
# 1. Get vhost_virtqueue status for vhost-crypto
|
|
#
|
|
# -> { "execute": "x-query-virtio-vhost-queue-status",
|
|
# "arguments": { "path": "/machine/peripheral/crypto0/virtio-backend",
|
|
# "queue": 0 }
|
|
# }
|
|
# <- { "return": {
|
|
# "avail-phys": 5216124928,
|
|
# "name": "virtio-crypto",
|
|
# "used-phys": 5216127040,
|
|
# "avail-size": 2054,
|
|
# "desc-size": 16384,
|
|
# "used-size": 8198,
|
|
# "desc": 140141447430144,
|
|
# "num": 1024,
|
|
# "call": 0,
|
|
# "avail": 140141447446528,
|
|
# "desc-phys": 5216108544,
|
|
# "used": 140141447448640,
|
|
# "kick": 0
|
|
# }
|
|
# }
|
|
#
|
|
# 2. Get vhost_virtqueue status for vhost-vsock
|
|
#
|
|
# -> { "execute": "x-query-virtio-vhost-queue-status",
|
|
# "arguments": { "path": "/machine/peripheral/vsock0/virtio-backend",
|
|
# "queue": 0 }
|
|
# }
|
|
# <- { "return": {
|
|
# "avail-phys": 5182261248,
|
|
# "name": "vhost-vsock",
|
|
# "used-phys": 5182261568,
|
|
# "avail-size": 262,
|
|
# "desc-size": 2048,
|
|
# "used-size": 1030,
|
|
# "desc": 140141413580800,
|
|
# "num": 128,
|
|
# "call": 0,
|
|
# "avail": 140141413582848,
|
|
# "desc-phys": 5182259200,
|
|
# "used": 140141413583168,
|
|
# "kick": 0
|
|
# }
|
|
# }
|
|
#
|
|
##
|
|
|
|
{ 'command': 'x-query-virtio-vhost-queue-status',
|
|
'data': { 'path': 'str', 'queue': 'uint16' },
|
|
'returns': 'VirtVhostQueueStatus',
|
|
'features': [ 'unstable' ] }
|
|
|
|
##
|
|
# @VirtioRingDesc:
|
|
#
|
|
# Information regarding the vring descriptor area
|
|
#
|
|
# @addr: Guest physical address of the descriptor area
|
|
#
|
|
# @len: Length of the descriptor area
|
|
#
|
|
# @flags: List of descriptor flags
|
|
#
|
|
# Since: 7.1
|
|
#
|
|
##
|
|
|
|
{ 'struct': 'VirtioRingDesc',
|
|
'data': { 'addr': 'uint64',
|
|
'len': 'uint32',
|
|
'flags': [ 'str' ] } }
|
|
|
|
##
|
|
# @VirtioRingAvail:
|
|
#
|
|
# Information regarding the avail vring (a.k.a. driver area)
|
|
#
|
|
# @flags: VRingAvail flags
|
|
#
|
|
# @idx: VRingAvail index
|
|
#
|
|
# @ring: VRingAvail ring[] entry at provided index
|
|
#
|
|
# Since: 7.1
|
|
#
|
|
##
|
|
|
|
{ 'struct': 'VirtioRingAvail',
|
|
'data': { 'flags': 'uint16',
|
|
'idx': 'uint16',
|
|
'ring': 'uint16' } }
|
|
|
|
##
|
|
# @VirtioRingUsed:
|
|
#
|
|
# Information regarding the used vring (a.k.a. device area)
|
|
#
|
|
# @flags: VRingUsed flags
|
|
#
|
|
# @idx: VRingUsed index
|
|
#
|
|
# Since: 7.1
|
|
#
|
|
##
|
|
|
|
{ 'struct': 'VirtioRingUsed',
|
|
'data': { 'flags': 'uint16',
|
|
'idx': 'uint16' } }
|
|
|
|
##
|
|
# @VirtioQueueElement:
|
|
#
|
|
# Information regarding a VirtQueue's VirtQueueElement including
|
|
# descriptor, driver, and device areas
|
|
#
|
|
# @name: Name of the VirtIODevice that uses this VirtQueue
|
|
#
|
|
# @index: Index of the element in the queue
|
|
#
|
|
# @descs: List of descriptors (VirtioRingDesc)
|
|
#
|
|
# @avail: VRingAvail info
|
|
#
|
|
# @used: VRingUsed info
|
|
#
|
|
# Since: 7.1
|
|
#
|
|
##
|
|
|
|
{ 'struct': 'VirtioQueueElement',
|
|
'data': { 'name': 'str',
|
|
'index': 'uint32',
|
|
'descs': [ 'VirtioRingDesc' ],
|
|
'avail': 'VirtioRingAvail',
|
|
'used': 'VirtioRingUsed' } }
|
|
|
|
##
|
|
# @x-query-virtio-queue-element:
|
|
#
|
|
# Return the information about a VirtQueue's VirtQueueElement
|
|
#
|
|
# @path: VirtIODevice canonical QOM path
|
|
#
|
|
# @queue: VirtQueue index to examine
|
|
#
|
|
# @index: Index of the element in the queue
|
|
# (default: head of the queue)
|
|
#
|
|
# Features:
|
|
# @unstable: This command is meant for debugging.
|
|
#
|
|
# Returns: VirtioQueueElement information
|
|
#
|
|
# Since: 7.1
|
|
#
|
|
# Examples:
|
|
#
|
|
# 1. Introspect on virtio-net's VirtQueue 0 at index 5
|
|
#
|
|
# -> { "execute": "x-query-virtio-queue-element",
|
|
# "arguments": { "path": "/machine/peripheral-anon/device[1]/virtio-backend",
|
|
# "queue": 0,
|
|
# "index": 5 }
|
|
# }
|
|
# <- { "return": {
|
|
# "index": 5,
|
|
# "name": "virtio-net",
|
|
# "descs": [
|
|
# {
|
|
# "flags": ["write"],
|
|
# "len": 1536,
|
|
# "addr": 5257305600
|
|
# }
|
|
# ],
|
|
# "avail": {
|
|
# "idx": 256,
|
|
# "flags": 0,
|
|
# "ring": 5
|
|
# },
|
|
# "used": {
|
|
# "idx": 13,
|
|
# "flags": 0
|
|
# }
|
|
# }
|
|
# }
|
|
#
|
|
# 2. Introspect on virtio-crypto's VirtQueue 1 at head
|
|
#
|
|
# -> { "execute": "x-query-virtio-queue-element",
|
|
# "arguments": { "path": "/machine/peripheral/crypto0/virtio-backend",
|
|
# "queue": 1 }
|
|
# }
|
|
# <- { "return": {
|
|
# "index": 0,
|
|
# "name": "virtio-crypto",
|
|
# "descs": [
|
|
# {
|
|
# "flags": [],
|
|
# "len": 0,
|
|
# "addr": 8080268923184214134
|
|
# }
|
|
# ],
|
|
# "avail": {
|
|
# "idx": 280,
|
|
# "flags": 0,
|
|
# "ring": 0
|
|
# },
|
|
# "used": {
|
|
# "idx": 280,
|
|
# "flags": 0
|
|
# }
|
|
# }
|
|
# }
|
|
#
|
|
# 3. Introspect on virtio-scsi's VirtQueue 2 at head
|
|
#
|
|
# -> { "execute": "x-query-virtio-queue-element",
|
|
# "arguments": { "path": "/machine/peripheral-anon/device[2]/virtio-backend",
|
|
# "queue": 2 }
|
|
# }
|
|
# <- { "return": {
|
|
# "index": 19,
|
|
# "name": "virtio-scsi",
|
|
# "descs": [
|
|
# {
|
|
# "flags": ["used", "indirect", "write"],
|
|
# "len": 4099327944,
|
|
# "addr": 12055409292258155293
|
|
# }
|
|
# ],
|
|
# "avail": {
|
|
# "idx": 1147,
|
|
# "flags": 0,
|
|
# "ring": 19
|
|
# },
|
|
# "used": {
|
|
# "idx": 280,
|
|
# "flags": 0
|
|
# }
|
|
# }
|
|
# }
|
|
#
|
|
##
|
|
|
|
{ 'command': 'x-query-virtio-queue-element',
|
|
'data': { 'path': 'str', 'queue': 'uint16', '*index': 'uint16' },
|
|
'returns': 'VirtioQueueElement',
|
|
'features': [ 'unstable' ] }
|