From: "Michael S. Tsirkin" <mst@redhat.com>
To: qemu-devel@nongnu.org
Cc: "Peter Maydell" <peter.maydell@linaro.org>,
"Laurent Vivier" <lvivier@redhat.com>,
"Jonah Palmer" <jonah.palmer@oracle.com>,
"Stefan Hajnoczi" <stefanha@redhat.com>,
"Kevin Wolf" <kwolf@redhat.com>,
"Hanna Reitz" <hreitz@redhat.com>, "Amit Shah" <amit@kernel.org>,
"Marc-André Lureau" <marcandre.lureau@redhat.com>,
"Paolo Bonzini" <pbonzini@redhat.com>,
"Gerd Hoffmann" <kraxel@redhat.com>,
"Jason Wang" <jasowang@redhat.com>, "Fam Zheng" <fam@euphon.net>,
"Dr. David Alan Gilbert" <dgilbert@redhat.com>,
"David Hildenbrand" <david@redhat.com>,
"Gonglei (Arei)" <arei.gonglei@huawei.com>,
"Eric Auger" <eric.auger@redhat.com>,
"Eric Blake" <eblake@redhat.com>,
"Markus Armbruster" <armbru@redhat.com>,
qemu-block@nongnu.org, virtio-fs@redhat.com
Subject: [PULL 74/91] qmp: decode feature & status bits in virtio-status
Date: Mon, 16 May 2022 06:39:56 -0400 [thread overview]
Message-ID: <20220516095448.507876-75-mst@redhat.com> (raw)
In-Reply-To: <20220516095448.507876-1-mst@redhat.com>
From: Laurent Vivier <lvivier@redhat.com>
Display feature names instead of bitmaps for host, guest, and
backend for VirtIODevices.
Display status names instead of bitmaps for VirtIODevices.
Display feature names instead of bitmaps for backend, protocol,
acked, and features (hdev->features) for vhost devices.
Decode features according to device ID. Decode statuses
according to configuration status bitmap (config_status_map).
Decode vhost user protocol features according to vhost user
protocol bitmap (vhost_user_protocol_map).
Transport features are on the first line. Undecoded bits (if
any) are stored in a separate field.
Signed-off-by: Jonah Palmer <jonah.palmer@oracle.com>
Message-Id: <1648819405-25696-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>
---
qapi/virtio.json | 156 ++++++++++++++---
include/hw/virtio/vhost.h | 3 +
include/hw/virtio/virtio.h | 19 +++
hw/block/virtio-blk.c | 29 ++++
hw/char/virtio-serial-bus.c | 11 ++
hw/display/virtio-gpu.c | 18 ++
hw/input/virtio-input.c | 10 ++
hw/net/virtio-net.c | 47 +++++
hw/scsi/virtio-scsi.c | 17 ++
hw/virtio/vhost-user-fs.c | 10 ++
hw/virtio/vhost-user-i2c.c | 14 ++
hw/virtio/vhost-vsock-common.c | 10 ++
hw/virtio/virtio-balloon.c | 14 ++
hw/virtio/virtio-crypto.c | 10 ++
hw/virtio/virtio-iommu.c | 14 ++
hw/virtio/virtio-mem.c | 11 ++
hw/virtio/virtio.c | 302 ++++++++++++++++++++++++++++++++-
17 files changed, 667 insertions(+), 28 deletions(-)
diff --git a/qapi/virtio.json b/qapi/virtio.json
index ba61d83df7..474a8bd64e 100644
--- a/qapi/virtio.json
+++ b/qapi/virtio.json
@@ -106,10 +106,10 @@
'n-tmp-sections': 'int',
'nvqs': 'uint32',
'vq-index': 'int',
- 'features': 'uint64',
- 'acked-features': 'uint64',
- 'backend-features': 'uint64',
- 'protocol-features': 'uint64',
+ 'features': 'VirtioDeviceFeatures',
+ 'acked-features': 'VirtioDeviceFeatures',
+ 'backend-features': 'VirtioDeviceFeatures',
+ 'protocol-features': 'VhostDeviceProtocols',
'max-queues': 'uint64',
'backend-cap': 'uint64',
'log-enabled': 'bool',
@@ -176,11 +176,11 @@
'device-id': 'uint16',
'vhost-started': 'bool',
'device-endian': 'str',
- 'guest-features': 'uint64',
- 'host-features': 'uint64',
- 'backend-features': 'uint64',
+ 'guest-features': 'VirtioDeviceFeatures',
+ 'host-features': 'VirtioDeviceFeatures',
+ 'backend-features': 'VirtioDeviceFeatures',
'num-vqs': 'int',
- 'status': 'uint8',
+ 'status': 'VirtioDeviceStatus',
'isr': 'uint8',
'queue-sel': 'uint16',
'vm-running': 'bool',
@@ -222,14 +222,28 @@
# "name": "virtio-crypto",
# "started": true,
# "device-id": 20,
-# "backend-features": 0,
+# "backend-features": {
+# "transports": [],
+# "dev-features": []
+# },
# "start-on-kick": false,
# "isr": 1,
# "broken": false,
-# "status": 15,
+# "status": {
+# "statuses": ["ACKNOWLEDGE", "DRIVER", "FEATURES_OK",
+# "DRIVER_OK"]
+# },
# "num-vqs": 2,
-# "guest-features": 5100273664,
-# "host-features": 6325010432,
+# "guest-features": {
+# "transports": ["EVENT_IDX", "INDIRECT_DESC", "VERSION_1"],
+# "dev-features": []
+# },
+# "host-features": {
+# "transports": ["PROTOCOL_FEATURES", "EVENT_IDX",
+# "INDIRECT_DESC", "VERSION_1", "ANY_LAYOUT",
+# "NOTIFY_ON_EMPTY"],
+# "dev-features": []
+# },
# "use-guest-notifier-mask": true,
# "vm-running": true,
# "queue-sel": 1,
@@ -257,22 +271,65 @@
# "max-queues": 1,
# "backend-cap": 2,
# "log-size": 0,
-# "backend-features": 0,
+# "backend-features": {
+# "transports": [],
+# "dev-features": []
+# },
# "nvqs": 2,
-# "protocol-features": 0,
+# "protocol-features": {
+# "protocols": []
+# },
# "vq-index": 0,
# "log-enabled": false,
-# "acked-features": 5100306432,
-# "features": 13908344832
+# "acked-features": {
+# "transports": ["EVENT_IDX", "INDIRECT_DESC", "VERSION_1",
+# "ANY_LAYOUT", "NOTIFY_ON_EMPTY"],
+# "dev-features": ["MRG_RXBUF"]
+# },
+# "features": {
+# "transports": ["EVENT_IDX", "INDIRECT_DESC",
+# "IOMMU_PLATFORM", "VERSION_1", "ANY_LAYOUT",
+# "NOTIFY_ON_EMPTY"],
+# "dev-features": ["LOG_ALL", "MRG_RXBUF"]
+# }
+# },
+# "backend-features": {
+# "transports": ["PROTOCOL_FEATURES", "EVENT_IDX", "INDIRECT_DESC",
+# "VERSION_1", "ANY_LAYOUT", "NOTIFY_ON_EMPTY"],
+# "dev-features": ["GSO", "CTRL_MAC_ADDR", "GUEST_ANNOUNCE", "CTRL_RX_EXTRA",
+# "CTRL_VLAN", "CTRL_RX", "CTRL_VQ", "STATUS", "MRG_RXBUF",
+# "HOST_UFO", "HOST_ECN", "HOST_TSO6", "HOST_TSO4",
+# "GUEST_UFO", "GUEST_ECN", "GUEST_TSO6", "GUEST_TSO4",
+# "MAC", "CTRL_GUEST_OFFLOADS", "GUEST_CSUM", "CSUM"]
# },
-# "backend-features": 6337593319,
# "start-on-kick": false,
# "isr": 1,
# "broken": false,
-# "status": 15,
+# "status": {
+# "statuses": ["ACKNOWLEDGE", "DRIVER", "FEATURES_OK", "DRIVER_OK"]
+# },
# "num-vqs": 3,
-# "guest-features": 5111807911,
-# "host-features": 6337593319,
+# "guest-features": {
+# "transports": ["EVENT_IDX", "INDIRECT_DESC", "VERSION_1"],
+# "dev-features": ["CTRL_MAC_ADDR", "GUEST_ANNOUNCE", "CTRL_VLAN",
+# "CTRL_RX", "CTRL_VQ", "STATUS", "MRG_RXBUF",
+# "HOST_UFO", "HOST_ECN", "HOST_TSO6",
+# "HOST_TSO4", "GUEST_UFO", "GUEST_ECN",
+# "GUEST_TSO6", "GUEST_TSO4", "MAC",
+# "CTRL_GUEST_OFFLOADS", "GUEST_CSUM", "CSUM"]
+# },
+# "host-features": {
+# "transports": ["PROTOCOL_FEATURES", "EVENT_IDX",
+# "INDIRECT_DESC", "VERSION_1", "ANY_LAYOUT",
+# "NOTIFY_ON_EMPTY"],
+# "dev-features": ["GSO", "CTRL_MAC_ADDR", "GUEST_ANNOUNCE",
+# "CTRL_RX_EXTRA", "CTRL_VLAN", "CTRL_RX",
+# "CTRL_VQ", "STATUS", "MRG_RXBUF", "HOST_UFO",
+# "HOST_ECN", "HOST_TSO4", "HOST_TSO4",
+# "GUEST_UFO", "GUEST_ECN", "GUEST_TSO6",
+# "GUEST_TSO4", "MAC", "CTRL_GUEST_OFFLOADS",
+# "GUEST_CSUM", "CSUM"]
+# },
# "use-guest-notifier-mask": true,
# "vm-running": true,
# "queue-sel": 2,
@@ -288,3 +345,62 @@
'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.0
+##
+
+{ '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.0
+##
+
+{ '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.0
+##
+
+{ 'struct': 'VirtioDeviceFeatures',
+ 'data': { 'transports': [ 'str' ],
+ '*dev-features': [ 'str' ],
+ '*unknown-dev-features': 'uint64' } }
diff --git a/include/hw/virtio/vhost.h b/include/hw/virtio/vhost.h
index b291fe4e24..7547bff7fc 100644
--- a/include/hw/virtio/vhost.h
+++ b/include/hw/virtio/vhost.h
@@ -5,6 +5,9 @@
#include "hw/virtio/virtio.h"
#include "exec/memory.h"
+#define VHOST_F_DEVICE_IOTLB 63
+#define VHOST_USER_F_PROTOCOL_FEATURES 30
+
/* Generic structures common for any vhost based device. */
struct vhost_inflight {
diff --git a/include/hw/virtio/virtio.h b/include/hw/virtio/virtio.h
index 375eb5671b..a031904522 100644
--- a/include/hw/virtio/virtio.h
+++ b/include/hw/virtio/virtio.h
@@ -71,6 +71,25 @@ typedef struct VirtQueueElement
#define TYPE_VIRTIO_DEVICE "virtio-device"
OBJECT_DECLARE_TYPE(VirtIODevice, VirtioDeviceClass, VIRTIO_DEVICE)
+typedef struct {
+ int virtio_bit;
+ const char *feature_name;
+} qmp_virtio_feature_map_t;
+
+extern qmp_virtio_feature_map_t serial_map[];
+extern qmp_virtio_feature_map_t blk_map[];
+extern qmp_virtio_feature_map_t gpu_map[];
+extern qmp_virtio_feature_map_t net_map[];
+extern qmp_virtio_feature_map_t scsi_map[];
+extern qmp_virtio_feature_map_t balloon_map[];
+extern qmp_virtio_feature_map_t iommu_map[];
+extern qmp_virtio_feature_map_t input_map[];
+extern qmp_virtio_feature_map_t fs_map[];
+extern qmp_virtio_feature_map_t vsock_map[];
+extern qmp_virtio_feature_map_t crypto_map[];
+extern qmp_virtio_feature_map_t mem_map[];
+extern qmp_virtio_feature_map_t i2c_map[];
+
enum virtio_device_endian {
VIRTIO_DEVICE_ENDIAN_UNKNOWN,
VIRTIO_DEVICE_ENDIAN_LITTLE,
diff --git a/hw/block/virtio-blk.c b/hw/block/virtio-blk.c
index cd804795c6..b905fa19a3 100644
--- a/hw/block/virtio-blk.c
+++ b/hw/block/virtio-blk.c
@@ -13,6 +13,7 @@
#include "qemu/osdep.h"
#include "qapi/error.h"
+#include "qapi/qapi-visit-virtio.h"
#include "qemu/iov.h"
#include "qemu/module.h"
#include "qemu/error-report.h"
@@ -33,10 +34,38 @@
#include "migration/qemu-file-types.h"
#include "hw/virtio/virtio-access.h"
#include "qemu/coroutine.h"
+#include "standard-headers/linux/vhost_types.h"
/* Config size before the discard support (hide associated config fields) */
#define VIRTIO_BLK_CFG_SIZE offsetof(struct virtio_blk_config, \
max_discard_sectors)
+
+qmp_virtio_feature_map_t blk_map[] = {
+#define FEATURE_ENTRY(name) \
+ { VIRTIO_BLK_F_##name, #name }
+ FEATURE_ENTRY(SIZE_MAX),
+ FEATURE_ENTRY(SEG_MAX),
+ FEATURE_ENTRY(GEOMETRY),
+ FEATURE_ENTRY(RO),
+ FEATURE_ENTRY(BLK_SIZE),
+ FEATURE_ENTRY(TOPOLOGY),
+ FEATURE_ENTRY(MQ),
+ FEATURE_ENTRY(DISCARD),
+ FEATURE_ENTRY(WRITE_ZEROES),
+#ifndef VIRTIO_BLK_NO_LEGACY
+ FEATURE_ENTRY(BARRIER),
+ FEATURE_ENTRY(SCSI),
+ FEATURE_ENTRY(FLUSH),
+ FEATURE_ENTRY(CONFIG_WCE),
+#endif /* !VIRTIO_BLK_NO_LEGACY */
+#undef FEATURE_ENTRY
+#define FEATURE_ENTRY(name) \
+ { VHOST_F_##name, #name }
+ FEATURE_ENTRY(LOG_ALL),
+#undef FEATURE_ENTRY
+ { -1, "" }
+};
+
/*
* Starting from the discard feature, we can use this array to properly
* set the config size depending on the features enabled.
diff --git a/hw/char/virtio-serial-bus.c b/hw/char/virtio-serial-bus.c
index 7d4601cb5d..fbb31a2b16 100644
--- a/hw/char/virtio-serial-bus.c
+++ b/hw/char/virtio-serial-bus.c
@@ -20,6 +20,7 @@
#include "qemu/osdep.h"
#include "qapi/error.h"
+#include "qapi/qapi-visit-virtio.h"
#include "qemu/iov.h"
#include "qemu/main-loop.h"
#include "qemu/module.h"
@@ -32,6 +33,16 @@
#include "hw/virtio/virtio-serial.h"
#include "hw/virtio/virtio-access.h"
+qmp_virtio_feature_map_t serial_map[] = {
+#define FEATURE_ENTRY(name) \
+ { VIRTIO_CONSOLE_F_##name, #name }
+ FEATURE_ENTRY(SIZE),
+ FEATURE_ENTRY(MULTIPORT),
+ FEATURE_ENTRY(EMERG_WRITE),
+#undef FEATURE_ENTRY
+ { -1, "" }
+};
+
static struct VirtIOSerialDevices {
QLIST_HEAD(, VirtIOSerial) devices;
} vserdevices;
diff --git a/hw/display/virtio-gpu.c b/hw/display/virtio-gpu.c
index 529b5246b2..0bd5dc6232 100644
--- a/hw/display/virtio-gpu.c
+++ b/hw/display/virtio-gpu.c
@@ -29,10 +29,28 @@
#include "qemu/log.h"
#include "qemu/module.h"
#include "qapi/error.h"
+#include "qapi/qapi-visit-virtio.h"
#include "qemu/error-report.h"
+#include "standard-headers/linux/vhost_types.h"
#define VIRTIO_GPU_VM_VERSION 1
+qmp_virtio_feature_map_t gpu_map[] = {
+#define FEATURE_ENTRY(name) \
+ { VIRTIO_GPU_F_##name, #name }
+ FEATURE_ENTRY(VIRGL),
+ FEATURE_ENTRY(EDID),
+ FEATURE_ENTRY(RESOURCE_UUID),
+ FEATURE_ENTRY(RESOURCE_BLOB),
+ FEATURE_ENTRY(CONTEXT_INIT),
+#undef FEATURE_ENTRY
+#define FEATURE_ENTRY(name) \
+ { VHOST_F_##name, #name }
+ FEATURE_ENTRY(LOG_ALL),
+#undef FEATURE_ENTRY
+ { -1, "" }
+};
+
static struct virtio_gpu_simple_resource*
virtio_gpu_find_resource(VirtIOGPU *g, uint32_t resource_id);
static struct virtio_gpu_simple_resource *
diff --git a/hw/input/virtio-input.c b/hw/input/virtio-input.c
index 5b5398b3ca..fe0ed6d5b4 100644
--- a/hw/input/virtio-input.c
+++ b/hw/input/virtio-input.c
@@ -6,6 +6,7 @@
#include "qemu/osdep.h"
#include "qapi/error.h"
+#include "qapi/qapi-visit-virtio.h"
#include "qemu/iov.h"
#include "qemu/module.h"
#include "trace.h"
@@ -14,10 +15,19 @@
#include "hw/qdev-properties.h"
#include "hw/virtio/virtio-input.h"
+#include "standard-headers/linux/vhost_types.h"
#include "standard-headers/linux/input.h"
#define VIRTIO_INPUT_VM_VERSION 1
+qmp_virtio_feature_map_t input_map[] = {
+#define FEATURE_ENTRY(name) \
+ { VHOST_F_##name, #name }
+ FEATURE_ENTRY(LOG_ALL),
+#undef FEATURE_ENTRY
+ { -1, "" }
+};
+
/* ----------------------------------------------------------------- */
void virtio_input_send(VirtIOInput *vinput, virtio_input_event *event)
diff --git a/hw/net/virtio-net.c b/hw/net/virtio-net.c
index a788f1c5c7..9ad466f556 100644
--- a/hw/net/virtio-net.c
+++ b/hw/net/virtio-net.c
@@ -35,9 +35,11 @@
#include "hw/qdev-properties.h"
#include "qapi/qapi-types-migration.h"
#include "qapi/qapi-events-migration.h"
+#include "qapi/qapi-visit-virtio.h"
#include "hw/virtio/virtio-access.h"
#include "migration/misc.h"
#include "standard-headers/linux/ethtool.h"
+#include "standard-headers/linux/vhost_types.h"
#include "sysemu/sysemu.h"
#include "trace.h"
#include "monitor/qdev.h"
@@ -90,6 +92,51 @@
VIRTIO_NET_RSS_HASH_TYPE_TCP_EX | \
VIRTIO_NET_RSS_HASH_TYPE_UDP_EX)
+qmp_virtio_feature_map_t net_map[] = {
+#define FEATURE_ENTRY(name) \
+ { VIRTIO_NET_F_##name, #name }
+ FEATURE_ENTRY(CSUM),
+ FEATURE_ENTRY(GUEST_CSUM),
+ FEATURE_ENTRY(CTRL_GUEST_OFFLOADS),
+ FEATURE_ENTRY(MTU),
+ FEATURE_ENTRY(MAC),
+ FEATURE_ENTRY(GUEST_TSO4),
+ FEATURE_ENTRY(GUEST_TSO6),
+ FEATURE_ENTRY(GUEST_ECN),
+ FEATURE_ENTRY(GUEST_UFO),
+ FEATURE_ENTRY(HOST_TSO4),
+ FEATURE_ENTRY(HOST_TSO6),
+ FEATURE_ENTRY(HOST_ECN),
+ FEATURE_ENTRY(HOST_UFO),
+ FEATURE_ENTRY(MRG_RXBUF),
+ FEATURE_ENTRY(STATUS),
+ FEATURE_ENTRY(CTRL_VQ),
+ FEATURE_ENTRY(CTRL_RX),
+ FEATURE_ENTRY(CTRL_VLAN),
+ FEATURE_ENTRY(CTRL_RX_EXTRA),
+ FEATURE_ENTRY(GUEST_ANNOUNCE),
+ FEATURE_ENTRY(MQ),
+ FEATURE_ENTRY(CTRL_MAC_ADDR),
+ FEATURE_ENTRY(HASH_REPORT),
+ FEATURE_ENTRY(RSS),
+ FEATURE_ENTRY(RSC_EXT),
+ FEATURE_ENTRY(STANDBY),
+ FEATURE_ENTRY(SPEED_DUPLEX),
+#ifndef VIRTIO_NET_NO_LEGACY
+ FEATURE_ENTRY(GSO),
+#endif /* VIRTIO_NET_NO_LEGACY */
+#undef FEATURE_ENTRY
+#define FEATURE_ENTRY(name) \
+ { VHOST_NET_F_##name, #name }
+ FEATURE_ENTRY(VIRTIO_NET_HDR),
+#undef FEATURE_ENTRY
+#define FEATURE_ENTRY(name) \
+ { VHOST_F_##name, #name }
+ FEATURE_ENTRY(LOG_ALL),
+#undef FEATURE_ENTRY
+ { -1, "" }
+};
+
static const VirtIOFeature feature_sizes[] = {
{.flags = 1ULL << VIRTIO_NET_F_MAC,
.end = endof(struct virtio_net_config, mac)},
diff --git a/hw/scsi/virtio-scsi.c b/hw/scsi/virtio-scsi.c
index 4141dddd51..66bcd1789c 100644
--- a/hw/scsi/virtio-scsi.c
+++ b/hw/scsi/virtio-scsi.c
@@ -15,7 +15,9 @@
#include "qemu/osdep.h"
#include "qapi/error.h"
+#include "qapi/qapi-visit-virtio.h"
#include "standard-headers/linux/virtio_ids.h"
+#include "standard-headers/linux/vhost_types.h"
#include "hw/virtio/virtio-scsi.h"
#include "migration/qemu-file-types.h"
#include "qemu/error-report.h"
@@ -66,6 +68,21 @@ typedef struct VirtIOSCSIReq {
} req;
} VirtIOSCSIReq;
+qmp_virtio_feature_map_t scsi_map[] = {
+#define FEATURE_ENTRY(name) \
+ { VIRTIO_SCSI_F_##name, #name }
+ FEATURE_ENTRY(INOUT),
+ FEATURE_ENTRY(HOTPLUG),
+ FEATURE_ENTRY(CHANGE),
+ FEATURE_ENTRY(T10_PI),
+#undef FEATURE_ENTRY
+#define FEATURE_ENTRY(name) \
+ { VHOST_F_##name, #name }
+ FEATURE_ENTRY(LOG_ALL),
+#undef FEATURE_ENTRY
+ { -1, "" }
+};
+
static inline int virtio_scsi_get_lun(uint8_t *lun)
{
return ((lun[2] << 8) | lun[3]) & 0x3FFF;
diff --git a/hw/virtio/vhost-user-fs.c b/hw/virtio/vhost-user-fs.c
index e513e4fdda..096cc07c44 100644
--- a/hw/virtio/vhost-user-fs.c
+++ b/hw/virtio/vhost-user-fs.c
@@ -15,6 +15,7 @@
#include <sys/ioctl.h>
#include "standard-headers/linux/virtio_fs.h"
#include "qapi/error.h"
+#include "qapi/qapi-visit-virtio.h"
#include "hw/qdev-properties.h"
#include "hw/qdev-properties-system.h"
#include "hw/virtio/virtio-bus.h"
@@ -23,6 +24,15 @@
#include "hw/virtio/vhost-user-fs.h"
#include "monitor/monitor.h"
#include "sysemu/sysemu.h"
+#include "standard-headers/linux/vhost_types.h"
+
+qmp_virtio_feature_map_t fs_map[] = {
+#define FEATURE_ENTRY(name) \
+ { VHOST_F_##name, #name }
+ FEATURE_ENTRY(LOG_ALL),
+#undef FEATURE_ENTRY
+ { -1, "" }
+};
static const int user_feature_bits[] = {
VIRTIO_F_VERSION_1,
diff --git a/hw/virtio/vhost-user-i2c.c b/hw/virtio/vhost-user-i2c.c
index 6020eee093..931ec9836c 100644
--- a/hw/virtio/vhost-user-i2c.c
+++ b/hw/virtio/vhost-user-i2c.c
@@ -8,11 +8,25 @@
#include "qemu/osdep.h"
#include "qapi/error.h"
+#include "qapi/qapi-visit-virtio.h"
#include "hw/qdev-properties.h"
#include "hw/virtio/virtio-bus.h"
#include "hw/virtio/vhost-user-i2c.h"
#include "qemu/error-report.h"
#include "standard-headers/linux/virtio_ids.h"
+#include "standard-headers/linux/vhost_types.h"
+
+qmp_virtio_feature_map_t i2c_map[] = {
+#define FEATURE_ENTRY(name) \
+ { VHOST_F_##name, #name }
+ FEATURE_ENTRY(LOG_ALL),
+#undef FEATURE_ENTRY
+#define FEATURE_ENTRY(name) \
+ { VIRTIO_I2C_F_##name, #name }
+ FEATURE_ENTRY(ZERO_LENGTH_REQUEST),
+#undef FEATURE_ENTRY
+ { -1, "" }
+};
static const int feature_bits[] = {
VIRTIO_I2C_F_ZERO_LENGTH_REQUEST,
diff --git a/hw/virtio/vhost-vsock-common.c b/hw/virtio/vhost-vsock-common.c
index 7394818e00..b03f94d8f8 100644
--- a/hw/virtio/vhost-vsock-common.c
+++ b/hw/virtio/vhost-vsock-common.c
@@ -11,12 +11,22 @@
#include "qemu/osdep.h"
#include "standard-headers/linux/virtio_vsock.h"
#include "qapi/error.h"
+#include "qapi/qapi-visit-virtio.h"
#include "hw/virtio/virtio-access.h"
#include "qemu/error-report.h"
#include "hw/qdev-properties.h"
#include "hw/virtio/vhost-vsock.h"
#include "qemu/iov.h"
#include "monitor/monitor.h"
+#include "standard-headers/linux/vhost_types.h"
+
+qmp_virtio_feature_map_t vsock_map[] = {
+#define FEATURE_ENTRY(name) \
+ { VHOST_F_##name, #name }
+ FEATURE_ENTRY(LOG_ALL),
+#undef FEATURE_ENTRY
+ { -1, "" }
+};
const int feature_bits[] = {
VIRTIO_VSOCK_F_SEQPACKET,
diff --git a/hw/virtio/virtio-balloon.c b/hw/virtio/virtio-balloon.c
index 73ac5eb675..8b604bb186 100644
--- a/hw/virtio/virtio-balloon.c
+++ b/hw/virtio/virtio-balloon.c
@@ -28,6 +28,7 @@
#include "qapi/error.h"
#include "qapi/qapi-events-machine.h"
#include "qapi/visitor.h"
+#include "qapi/qapi-visit-virtio.h"
#include "trace.h"
#include "qemu/error-report.h"
#include "migration/misc.h"
@@ -38,6 +39,19 @@
#define BALLOON_PAGE_SIZE (1 << VIRTIO_BALLOON_PFN_SHIFT)
+qmp_virtio_feature_map_t balloon_map[] = {
+#define FEATURE_ENTRY(name) \
+ { VIRTIO_BALLOON_F_##name, #name }
+ FEATURE_ENTRY(MUST_TELL_HOST),
+ FEATURE_ENTRY(STATS_VQ),
+ FEATURE_ENTRY(DEFLATE_ON_OOM),
+ FEATURE_ENTRY(FREE_PAGE_HINT),
+ FEATURE_ENTRY(PAGE_POISON),
+ FEATURE_ENTRY(REPORTING),
+#undef FEATURE_ENTRY
+ { -1, "" }
+};
+
typedef struct PartiallyBalloonedPage {
ram_addr_t base_gpa;
unsigned long *bitmap;
diff --git a/hw/virtio/virtio-crypto.c b/hw/virtio/virtio-crypto.c
index c3829e7498..7cf25df02c 100644
--- a/hw/virtio/virtio-crypto.c
+++ b/hw/virtio/virtio-crypto.c
@@ -16,6 +16,7 @@
#include "qemu/main-loop.h"
#include "qemu/module.h"
#include "qapi/error.h"
+#include "qapi/qapi-visit-virtio.h"
#include "qemu/error-report.h"
#include "hw/virtio/virtio.h"
@@ -23,10 +24,19 @@
#include "hw/qdev-properties.h"
#include "hw/virtio/virtio-access.h"
#include "standard-headers/linux/virtio_ids.h"
+#include "standard-headers/linux/vhost_types.h"
#include "sysemu/cryptodev-vhost.h"
#define VIRTIO_CRYPTO_VM_VERSION 1
+qmp_virtio_feature_map_t crypto_map[] = {
+#define FEATURE_ENTRY(name) \
+ { VHOST_F_##name, #name }
+ FEATURE_ENTRY(LOG_ALL),
+#undef FEATURE_ENTRY
+ { -1, "" }
+};
+
/*
* Transfer virtqueue index to crypto queue index.
* The control virtqueue is after the data virtqueues
diff --git a/hw/virtio/virtio-iommu.c b/hw/virtio/virtio-iommu.c
index 2597e166f9..c580366467 100644
--- a/hw/virtio/virtio-iommu.c
+++ b/hw/virtio/virtio-iommu.c
@@ -25,6 +25,7 @@
#include "sysemu/kvm.h"
#include "sysemu/reset.h"
#include "qapi/error.h"
+#include "qapi/qapi-visit-virtio.h"
#include "qemu/error-report.h"
#include "trace.h"
@@ -40,6 +41,19 @@
#define VIOMMU_DEFAULT_QUEUE_SIZE 256
#define VIOMMU_PROBE_SIZE 512
+qmp_virtio_feature_map_t iommu_map[] = {
+#define FEATURE_ENTRY(name) \
+ { VIRTIO_IOMMU_F_##name, #name }
+ FEATURE_ENTRY(INPUT_RANGE),
+ FEATURE_ENTRY(DOMAIN_RANGE),
+ FEATURE_ENTRY(MAP_UNMAP),
+ FEATURE_ENTRY(BYPASS),
+ FEATURE_ENTRY(PROBE),
+ FEATURE_ENTRY(MMIO),
+#undef FEATURE_ENTRY
+ { -1, "" }
+};
+
typedef struct VirtIOIOMMUDomain {
uint32_t id;
bool bypass;
diff --git a/hw/virtio/virtio-mem.c b/hw/virtio/virtio-mem.c
index 30d03e987a..fd7e09f585 100644
--- a/hw/virtio/virtio-mem.c
+++ b/hw/virtio/virtio-mem.c
@@ -24,6 +24,7 @@
#include "hw/virtio/virtio-mem.h"
#include "qapi/error.h"
#include "qapi/visitor.h"
+#include "qapi/qapi-visit-virtio.h"
#include "exec/ram_addr.h"
#include "migration/misc.h"
#include "hw/boards.h"
@@ -31,6 +32,16 @@
#include CONFIG_DEVICES
#include "trace.h"
+qmp_virtio_feature_map_t mem_map[] = {
+#define FEATURE_ENTRY(name) \
+ { VIRTIO_MEM_F_##name, #name }
+#ifndef CONFIG_ACPI
+ FEATURE_ENTRY(ACPI_PXM),
+#endif /* CONFIG_ACPI */
+#undef FEATURE_ENTRY
+ { -1, "" }
+};
+
/*
* We only had legacy x86 guests that did not support
* VIRTIO_MEM_F_UNPLUGGED_INACCESSIBLE. Other targets don't have legacy guests.
diff --git a/hw/virtio/virtio.c b/hw/virtio/virtio.c
index 3e0a484660..dd1ce5381b 100644
--- a/hw/virtio/virtio.c
+++ b/hw/virtio/virtio.c
@@ -34,10 +34,99 @@
#include "sysemu/dma.h"
#include "sysemu/runstate.h"
#include "standard-headers/linux/virtio_ids.h"
+#include "standard-headers/linux/vhost_types.h"
+#include CONFIG_DEVICES
/* QAPI list of realized VirtIODevices */
static QTAILQ_HEAD(, VirtIODevice) virtio_list;
+/*
+ * Maximum size of virtio device config space
+ */
+#define VHOST_USER_MAX_CONFIG_SIZE 256
+
+enum VhostUserProtocolFeature {
+ VHOST_USER_PROTOCOL_F_MQ = 0,
+ VHOST_USER_PROTOCOL_F_LOG_SHMFD = 1,
+ VHOST_USER_PROTOCOL_F_RARP = 2,
+ VHOST_USER_PROTOCOL_F_REPLY_ACK = 3,
+ VHOST_USER_PROTOCOL_F_NET_MTU = 4,
+ VHOST_USER_PROTOCOL_F_SLAVE_REQ = 5,
+ VHOST_USER_PROTOCOL_F_CROSS_ENDIAN = 6,
+ VHOST_USER_PROTOCOL_F_CRYPTO_SESSION = 7,
+ VHOST_USER_PROTOCOL_F_PAGEFAULT = 8,
+ VHOST_USER_PROTOCOL_F_CONFIG = 9,
+ VHOST_USER_PROTOCOL_F_SLAVE_SEND_FD = 10,
+ VHOST_USER_PROTOCOL_F_HOST_NOTIFIER = 11,
+ VHOST_USER_PROTOCOL_F_INFLIGHT_SHMFD = 12,
+ VHOST_USER_PROTOCOL_F_RESET_DEVICE = 13,
+ VHOST_USER_PROTOCOL_F_INBAND_NOTIFICATIONS = 14,
+ VHOST_USER_PROTOCOL_F_CONFIGURE_MEM_SLOTS = 15,
+ VHOST_USER_PROTOCOL_F_MAX
+};
+
+static qmp_virtio_feature_map_t transport_map[] = {
+#define FEATURE_ENTRY(name) \
+ { VIRTIO_F_##name, #name }
+#ifndef VIRTIO_CONFIG_NO_LEGACY
+ FEATURE_ENTRY(NOTIFY_ON_EMPTY),
+ FEATURE_ENTRY(ANY_LAYOUT),
+#endif /* VIRTIO_CONFIG_NO_LEGACY */
+ FEATURE_ENTRY(VERSION_1),
+ FEATURE_ENTRY(IOMMU_PLATFORM),
+ FEATURE_ENTRY(RING_PACKED),
+ FEATURE_ENTRY(ORDER_PLATFORM),
+ FEATURE_ENTRY(SR_IOV),
+#undef FEATURE_ENTRY
+#define FEATURE_ENTRY(name) \
+ { VIRTIO_RING_F_##name, #name }
+ FEATURE_ENTRY(INDIRECT_DESC),
+ FEATURE_ENTRY(EVENT_IDX),
+#undef FEATURE_ENTRY
+#define FEATURE_ENTRY(name) \
+ { VHOST_USER_F_##name, #name }
+ FEATURE_ENTRY(PROTOCOL_FEATURES),
+#undef FEATURE_ENTRY
+ { -1, "" }
+};
+
+static qmp_virtio_feature_map_t vhost_user_protocol_map[] = {
+#define FEATURE_ENTRY(name) \
+ { VHOST_USER_PROTOCOL_F_##name, #name }
+ FEATURE_ENTRY(MQ),
+ FEATURE_ENTRY(LOG_SHMFD),
+ FEATURE_ENTRY(RARP),
+ FEATURE_ENTRY(REPLY_ACK),
+ FEATURE_ENTRY(NET_MTU),
+ FEATURE_ENTRY(SLAVE_REQ),
+ FEATURE_ENTRY(CROSS_ENDIAN),
+ FEATURE_ENTRY(CRYPTO_SESSION),
+ FEATURE_ENTRY(PAGEFAULT),
+ FEATURE_ENTRY(CONFIG),
+ FEATURE_ENTRY(SLAVE_SEND_FD),
+ FEATURE_ENTRY(HOST_NOTIFIER),
+ FEATURE_ENTRY(INFLIGHT_SHMFD),
+ FEATURE_ENTRY(RESET_DEVICE),
+ FEATURE_ENTRY(INBAND_NOTIFICATIONS),
+ FEATURE_ENTRY(CONFIGURE_MEM_SLOTS),
+#undef FEATURE_ENTRY
+ { -1, "" }
+};
+
+/* virtio device configuration statuses */
+static qmp_virtio_feature_map_t config_status_map[] = {
+#define STATUS_ENTRY(name) \
+ { VIRTIO_CONFIG_S_##name, #name }
+ STATUS_ENTRY(DRIVER_OK),
+ STATUS_ENTRY(FEATURES_OK),
+ STATUS_ENTRY(DRIVER),
+ STATUS_ENTRY(NEEDS_RESET),
+ STATUS_ENTRY(FAILED),
+ STATUS_ENTRY(ACKNOWLEDGE),
+#undef STATUS_ENTRY
+ { -1, "" }
+};
+
/*
* The alignment to use between consumer and producer parts of vring.
* x86 pagesize again. This is the default, used by transports like PCI
@@ -3975,6 +4064,196 @@ static VirtIODevice *virtio_device_find(const char *path)
return NULL;
}
+#define CONVERT_FEATURES(type, map, is_status, bitmap) \
+ ({ \
+ type *list = NULL; \
+ type *node; \
+ for (i = 0; map[i].virtio_bit != -1; i++) { \
+ if (is_status) { \
+ bit = map[i].virtio_bit; \
+ } \
+ else { \
+ bit = 1ULL << map[i].virtio_bit; \
+ } \
+ if ((bitmap & bit) == 0) { \
+ continue; \
+ } \
+ node = g_new0(type, 1); \
+ node->value = g_strdup(map[i].feature_name); \
+ node->next = list; \
+ list = node; \
+ bitmap ^= bit; \
+ } \
+ list; \
+ })
+
+static VirtioDeviceStatus *qmp_decode_status(uint8_t bitmap)
+{
+ VirtioDeviceStatus *status;
+ uint8_t bit;
+ int i;
+
+ status = g_new0(VirtioDeviceStatus, 1);
+ status->statuses = CONVERT_FEATURES(strList, config_status_map, 1, bitmap);
+ status->has_unknown_statuses = bitmap != 0;
+ if (status->has_unknown_statuses) {
+ status->unknown_statuses = bitmap;
+ }
+
+ return status;
+}
+
+static VhostDeviceProtocols *qmp_decode_protocols(uint64_t bitmap)
+{
+ VhostDeviceProtocols *vhu_protocols;
+ uint64_t bit;
+ int i;
+
+ vhu_protocols = g_new0(VhostDeviceProtocols, 1);
+ vhu_protocols->protocols =
+ CONVERT_FEATURES(strList,
+ vhost_user_protocol_map, 0, bitmap);
+ vhu_protocols->has_unknown_protocols = bitmap != 0;
+ if (vhu_protocols->has_unknown_protocols) {
+ vhu_protocols->unknown_protocols = bitmap;
+ }
+
+ return vhu_protocols;
+}
+
+static VirtioDeviceFeatures *qmp_decode_features(uint16_t device_id,
+ uint64_t bitmap)
+{
+ VirtioDeviceFeatures *features;
+ uint64_t bit;
+ int i;
+
+ features = g_new0(VirtioDeviceFeatures, 1);
+ features->has_dev_features = true;
+
+ /* transport features */
+ features->transports = CONVERT_FEATURES(strList, transport_map, 0, bitmap);
+
+ /* device features */
+ switch (device_id) {
+#ifdef CONFIG_VIRTIO_SERIAL
+ case VIRTIO_ID_CONSOLE:
+ features->dev_features =
+ CONVERT_FEATURES(strList, serial_map, 0, bitmap);
+ break;
+#endif
+#ifdef CONFIG_VIRTIO_BLK
+ case VIRTIO_ID_BLOCK:
+ features->dev_features =
+ CONVERT_FEATURES(strList, blk_map, 0, bitmap);
+ break;
+#endif
+#ifdef CONFIG_VIRTIO_GPU
+ case VIRTIO_ID_GPU:
+ features->dev_features =
+ CONVERT_FEATURES(strList, gpu_map, 0, bitmap);
+ break;
+#endif
+#ifdef CONFIG_VIRTIO_NET
+ case VIRTIO_ID_NET:
+ features->dev_features =
+ CONVERT_FEATURES(strList, net_map, 0, bitmap);
+ break;
+#endif
+#ifdef CONFIG_VIRTIO_SCSI
+ case VIRTIO_ID_SCSI:
+ features->dev_features =
+ CONVERT_FEATURES(strList, scsi_map, 0, bitmap);
+ break;
+#endif
+#ifdef CONFIG_VIRTIO_BALLOON
+ case VIRTIO_ID_BALLOON:
+ features->dev_features =
+ CONVERT_FEATURES(strList, balloon_map, 0, bitmap);
+ break;
+#endif
+#ifdef CONFIG_VIRTIO_IOMMU
+ case VIRTIO_ID_IOMMU:
+ features->dev_features =
+ CONVERT_FEATURES(strList, iommu_map, 0, bitmap);
+ break;
+#endif
+#ifdef CONFIG_VIRTIO_INPUT
+ case VIRTIO_ID_INPUT:
+ features->dev_features =
+ CONVERT_FEATURES(strList, input_map, 0, bitmap);
+ break;
+#endif
+#ifdef CONFIG_VHOST_USER_FS
+ case VIRTIO_ID_FS:
+ features->dev_features =
+ CONVERT_FEATURES(strList, fs_map, 0, bitmap);
+ break;
+#endif
+#ifdef CONFIG_VHOST_VSOCK
+ case VIRTIO_ID_VSOCK:
+ features->dev_features =
+ CONVERT_FEATURES(strList, vsock_map, 0, bitmap);
+ break;
+#endif
+#ifdef CONFIG_VIRTIO_CRYPTO
+ case VIRTIO_ID_CRYPTO:
+ features->dev_features =
+ CONVERT_FEATURES(strList, crypto_map, 0, bitmap);
+ break;
+#endif
+#ifdef CONFIG_VIRTIO_MEM
+ case VIRTIO_ID_MEM:
+ features->dev_features =
+ CONVERT_FEATURES(strList, mem_map, 0, bitmap);
+ break;
+#endif
+#ifdef CONFIG_VIRTIO_I2C_ADAPTER
+ case VIRTIO_ID_I2C_ADAPTER:
+ features->dev_features =
+ CONVERT_FEATURES(strList, i2c_map, 0, bitmap);
+ break;
+#endif
+ /* No features */
+ case VIRTIO_ID_9P:
+ case VIRTIO_ID_PMEM:
+ case VIRTIO_ID_RNG:
+ case VIRTIO_ID_IOMEM:
+ case VIRTIO_ID_RPMSG:
+ case VIRTIO_ID_CLOCK:
+ case VIRTIO_ID_MAC80211_WLAN:
+ case VIRTIO_ID_MAC80211_HWSIM:
+ case VIRTIO_ID_RPROC_SERIAL:
+ case VIRTIO_ID_MEMORY_BALLOON:
+ case VIRTIO_ID_CAIF:
+ case VIRTIO_ID_SIGNAL_DIST:
+ case VIRTIO_ID_PSTORE:
+ case VIRTIO_ID_SOUND:
+ case VIRTIO_ID_BT:
+ case VIRTIO_ID_RPMB:
+ case VIRTIO_ID_VIDEO_ENCODER:
+ case VIRTIO_ID_VIDEO_DECODER:
+ case VIRTIO_ID_SCMI:
+ case VIRTIO_ID_NITRO_SEC_MOD:
+ case VIRTIO_ID_WATCHDOG:
+ case VIRTIO_ID_CAN:
+ case VIRTIO_ID_DMABUF:
+ case VIRTIO_ID_PARAM_SERV:
+ case VIRTIO_ID_AUDIO_POLICY:
+ case VIRTIO_ID_GPIO:
+ break;
+ default:
+ g_assert_not_reached();
+ }
+
+ features->has_unknown_dev_features = bitmap != 0;
+ if (features->has_unknown_dev_features) {
+ features->unknown_dev_features = bitmap;
+ }
+
+ return features;
+}
+
VirtioStatus *qmp_x_query_virtio_status(const char *path, Error **errp)
{
VirtIODevice *vdev;
@@ -3990,9 +4269,12 @@ VirtioStatus *qmp_x_query_virtio_status(const char *path, Error **errp)
status->name = g_strdup(vdev->name);
status->device_id = vdev->device_id;
status->vhost_started = vdev->vhost_started;
- status->guest_features = vdev->guest_features;
- status->host_features = vdev->host_features;
- status->backend_features = vdev->backend_features;
+ status->guest_features = qmp_decode_features(vdev->device_id,
+ vdev->guest_features);
+ status->host_features = qmp_decode_features(vdev->device_id,
+ vdev->host_features);
+ status->backend_features = qmp_decode_features(vdev->device_id,
+ vdev->backend_features);
switch (vdev->device_endian) {
case VIRTIO_DEVICE_ENDIAN_LITTLE:
@@ -4007,7 +4289,7 @@ VirtioStatus *qmp_x_query_virtio_status(const char *path, Error **errp)
}
status->num_vqs = virtio_get_num_queues(vdev);
- status->status = vdev->status;
+ status->status = qmp_decode_status(vdev->status);
status->isr = vdev->isr;
status->queue_sel = vdev->queue_sel;
status->vm_running = vdev->vm_running;
@@ -4030,10 +4312,14 @@ VirtioStatus *qmp_x_query_virtio_status(const char *path, Error **errp)
status->vhost_dev->n_tmp_sections = hdev->n_tmp_sections;
status->vhost_dev->nvqs = hdev->nvqs;
status->vhost_dev->vq_index = hdev->vq_index;
- status->vhost_dev->features = hdev->features;
- status->vhost_dev->acked_features = hdev->acked_features;
- status->vhost_dev->backend_features = hdev->backend_features;
- status->vhost_dev->protocol_features = hdev->protocol_features;
+ status->vhost_dev->features =
+ qmp_decode_features(vdev->device_id, hdev->features);
+ status->vhost_dev->acked_features =
+ qmp_decode_features(vdev->device_id, hdev->acked_features);
+ status->vhost_dev->backend_features =
+ qmp_decode_features(vdev->device_id, hdev->backend_features);
+ status->vhost_dev->protocol_features =
+ qmp_decode_protocols(hdev->protocol_features);
status->vhost_dev->max_queues = hdev->max_queues;
status->vhost_dev->backend_cap = hdev->backend_cap;
status->vhost_dev->log_enabled = hdev->log_enabled;
--
MST
next prev parent reply other threads:[~2022-05-16 12:16 UTC|newest]
Thread overview: 94+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-05-16 10:35 [PULL 00/91] virtio,pc,pci: fixes,cleanups,features Michael S. Tsirkin
2022-05-16 10:35 ` [PULL 01/91] virtio: fix feature negotiation for ACCESS_PLATFORM Michael S. Tsirkin
2022-05-16 10:35 ` [PULL 02/91] intel-iommu: correct the value used for error_setg_errno() Michael S. Tsirkin
2022-05-16 10:35 ` [PULL 03/91] hw/pci/cxl: Add a CXL component type (interface) Michael S. Tsirkin
2022-05-16 10:35 ` [PULL 04/91] hw/cxl/component: Introduce CXL components (8.1.x, 8.2.5) Michael S. Tsirkin
2022-05-16 10:35 ` [PULL 05/91] MAINTAINERS: Add entry for Compute Express Link Emulation Michael S. Tsirkin
2022-05-16 10:35 ` [PULL 06/91] hw/cxl/device: Introduce a CXL device (8.2.8) Michael S. Tsirkin
2022-05-16 10:35 ` [PULL 07/91] hw/cxl/device: Implement the CAP array (8.2.8.1-2) Michael S. Tsirkin
2022-05-16 10:36 ` [PULL 08/91] hw/cxl/device: Implement basic mailbox (8.2.8.4) Michael S. Tsirkin
2022-05-16 10:36 ` [PULL 09/91] hw/cxl/device: Add memory device utilities Michael S. Tsirkin
2022-05-16 10:36 ` [PULL 10/91] hw/cxl/device: Add cheap EVENTS implementation (8.2.9.1) Michael S. Tsirkin
2022-05-16 10:36 ` [PULL 11/91] hw/cxl/device: Timestamp implementation (8.2.9.3) Michael S. Tsirkin
2022-05-16 10:36 ` [PULL 12/91] hw/cxl/device: Add log commands (8.2.9.4) + CEL Michael S. Tsirkin
2022-05-16 10:36 ` [PULL 13/91] hw/pxb: Use a type for realizing expanders Michael S. Tsirkin
2022-05-16 10:36 ` [PULL 14/91] hw/pci/cxl: Create a CXL bus type Michael S. Tsirkin
2022-05-16 10:36 ` [PULL 15/91] cxl: Machine level control on whether CXL support is enabled Michael S. Tsirkin
2022-05-16 10:36 ` [PULL 16/91] hw/pxb: Allow creation of a CXL PXB (host bridge) Michael S. Tsirkin
2022-05-16 10:36 ` [PULL 17/91] qtest/cxl: Introduce initial test for pxb-cxl only Michael S. Tsirkin
2022-05-16 10:36 ` [PULL 18/91] hw/cxl/rp: Add a root port Michael S. Tsirkin
2022-05-16 10:36 ` [PULL 19/91] hw/cxl/device: Add a memory device (8.2.8.5) Michael S. Tsirkin
2022-05-16 10:36 ` [PULL 20/91] hw/cxl/device: Implement MMIO HDM decoding (8.2.5.12) Michael S. Tsirkin
2022-05-16 10:36 ` [PULL 21/91] hw/cxl/device: Add some trivial commands Michael S. Tsirkin
2022-05-16 10:36 ` [PULL 22/91] hw/cxl/device: Plumb real Label Storage Area (LSA) sizing Michael S. Tsirkin
2022-05-16 10:36 ` [PULL 23/91] hw/cxl/device: Implement get/set Label Storage Area (LSA) Michael S. Tsirkin
2022-05-16 10:36 ` [PULL 24/91] qtests/cxl: Add initial root port and CXL type3 tests Michael S. Tsirkin
2022-05-16 10:37 ` [PULL 25/91] hw/cxl/component: Implement host bridge MMIO (8.2.5, table 142) Michael S. Tsirkin
2022-05-16 10:37 ` [PULL 26/91] acpi/cxl: Add _OSC implementation (9.14.2) Michael S. Tsirkin
2022-05-16 10:37 ` [PULL 27/91] acpi/cxl: Create the CEDT (9.14.1) Michael S. Tsirkin
2022-05-16 10:37 ` [PULL 28/91] hw/cxl/component: Add utils for interleave parameter encoding/decoding Michael S. Tsirkin
2022-05-16 10:37 ` [PULL 29/91] hw/cxl/host: Add support for CXL Fixed Memory Windows Michael S. Tsirkin
2022-05-16 10:37 ` [PULL 30/91] acpi/cxl: Introduce CFMWS structures in CEDT Michael S. Tsirkin
2022-05-16 10:37 ` [PULL 31/91] hw/pci-host/gpex-acpi: Add support for dsdt construction for pxb-cxl Michael S. Tsirkin
2022-05-16 10:37 ` [PULL 32/91] pci/pcie_port: Add pci_find_port_by_pn() Michael S. Tsirkin
2022-05-16 10:37 ` [PULL 33/91] CXL/cxl_component: Add cxl_get_hb_cstate() Michael S. Tsirkin
2022-05-16 10:37 ` [PULL 34/91] mem/cxl_type3: Add read and write functions for associated hostmem Michael S. Tsirkin
2022-05-16 10:37 ` [PULL 35/91] cxl/cxl-host: Add memops for CFMWS region Michael S. Tsirkin
2022-05-16 10:37 ` [PULL 36/91] hw/cxl/component Add a dumb HDM decoder handler Michael S. Tsirkin
2022-05-16 10:37 ` [PULL 37/91] i386/pc: Enable CXL fixed memory windows Michael S. Tsirkin
2022-05-16 10:37 ` [PULL 38/91] tests/acpi: q35: Allow addition of a CXL test Michael S. Tsirkin
2022-05-16 10:37 ` [PULL 39/91] qtests/bios-tables-test: Add a test for CXL emulation Michael S. Tsirkin
2022-05-16 10:37 ` [PULL 40/91] tests/acpi: Add tables " Michael S. Tsirkin
2022-05-16 10:38 ` [PULL 41/91] qtest/cxl: Add more complex test cases with CFMWs Michael S. Tsirkin
2022-05-16 10:38 ` [PULL 42/91] docs/cxl: Add initial Compute eXpress Link (CXL) documentation Michael S. Tsirkin
2022-05-16 10:38 ` [PULL 43/91] vhost: Track descriptor chain in private at SVQ Michael S. Tsirkin
2022-05-16 10:38 ` [PULL 44/91] vhost: Fix device's used descriptor dequeue Michael S. Tsirkin
2022-05-16 10:38 ` [PULL 45/91] vdpa: Fix bad index calculus at vhost_vdpa_get_vring_base Michael S. Tsirkin
2022-05-16 10:38 ` [PULL 46/91] vdpa: Fix index calculus at vhost_vdpa_svqs_start Michael S. Tsirkin
2022-05-16 10:38 ` [PULL 47/91] hw/virtio: Replace g_memdup() by g_memdup2() Michael S. Tsirkin
2022-05-16 10:38 ` [PULL 48/91] vhost: Fix element in vhost_svq_add failure Michael S. Tsirkin
2022-05-16 10:38 ` [PULL 49/91] target/i386: Fix sanity check on max APIC ID / X2APIC enablement Michael S. Tsirkin
2022-05-16 10:38 ` [PULL 50/91] intel_iommu: Support IR-only mode without DMA translation Michael S. Tsirkin
2022-05-16 10:38 ` [PULL 51/91] intel_iommu: Only allow interrupt remapping to be enabled if it's supported Michael S. Tsirkin
2022-05-16 10:38 ` [PULL 52/91] intel_iommu: Fix irqchip / X2APIC configuration checks Michael S. Tsirkin
2022-05-16 10:38 ` [PULL 53/91] intel-iommu: remove VTD_FR_RESERVED_ERR Michael S. Tsirkin
2022-05-16 10:38 ` [PULL 54/91] intel-iommu: block output address in interrupt address range Michael S. Tsirkin
2022-05-16 10:38 ` [PULL 55/91] intel-iommu: update root_scalable before switching as during post_load Michael S. Tsirkin
2022-05-16 10:38 ` [PULL 56/91] intel-iommu: update iq_dw during post load Michael S. Tsirkin
2022-05-16 10:38 ` [PULL 57/91] vhost_net: Print feature masks in hex Michael S. Tsirkin
2022-05-16 10:39 ` [PULL 58/91] hw/virtio: move virtio-pci.h into shared include space Michael S. Tsirkin
2022-05-16 10:39 ` [PULL 59/91] virtio-pci: add notification trace points Michael S. Tsirkin
2022-05-16 10:39 ` [PULL 60/91] hw/virtio: add vhost_user_[read|write] " Michael S. Tsirkin
2022-05-16 10:39 ` [PULL 61/91] docs: vhost-user: clean up request/reply description Michael S. Tsirkin
2022-05-16 10:39 ` [PULL 62/91] docs: vhost-user: rewrite section on ring state machine Michael S. Tsirkin
2022-05-16 10:39 ` [PULL 63/91] docs: vhost-user: replace master/slave with front-end/back-end Michael S. Tsirkin
2022-05-16 10:39 ` [PULL 64/91] vhost-user.rst: add clarifying language about protocol negotiation Michael S. Tsirkin
2022-05-16 10:39 ` [PULL 65/91] libvhost-user: expose vu_request_to_string Michael S. Tsirkin
2022-05-16 10:39 ` [PULL 66/91] docs/devel: start documenting writing VirtIO devices Michael S. Tsirkin
2022-05-16 10:39 ` [PULL 67/91] include/hw: start documenting the vhost API Michael S. Tsirkin
2022-05-16 10:39 ` [PULL 68/91] hw/virtio/vhost-user: don't suppress F_CONFIG when supported Michael S. Tsirkin
2022-05-16 10:39 ` [PULL 69/91] virtio/vhost-user: dynamically assign VhostUserHostNotifiers Michael S. Tsirkin
2022-05-16 10:39 ` [PULL 70/91] virtio: drop name parameter for virtio_init() Michael S. Tsirkin
2022-05-16 10:39 ` [PULL 71/91] virtio: add vhost support for virtio devices Michael S. Tsirkin
2022-05-16 10:39 ` [PULL 72/91] qmp: add QMP command x-query-virtio Michael S. Tsirkin
2022-05-16 10:39 ` [PULL 73/91] qmp: add QMP command x-query-virtio-status Michael S. Tsirkin
2022-05-16 10:39 ` Michael S. Tsirkin [this message]
2022-05-16 10:40 ` [PULL 75/91] qmp: add QMP commands for virtio/vhost queue-status Michael S. Tsirkin
2022-05-16 10:40 ` [PULL 76/91] qmp: add QMP command x-query-virtio-queue-element Michael S. Tsirkin
2022-05-16 10:40 ` [PULL 77/91] hmp: add virtio commands Michael S. Tsirkin
2022-05-16 10:40 ` [PULL 78/91] vhost-user: more master/slave things Michael S. Tsirkin
2022-05-16 10:40 ` [PULL 79/91] docs/vhost-user: Clarifications for VHOST_USER_ADD/REM_MEM_REG Michael S. Tsirkin
2022-05-16 10:40 ` [PULL 80/91] include/hw/pci/pcie_host: Correct PCIE_MMCFG_BUS_MASK Michael S. Tsirkin
2022-05-16 10:40 ` [PULL 81/91] include/hw/pci/pcie_host: Correct PCIE_MMCFG_SIZE_MAX Michael S. Tsirkin
2022-05-16 10:40 ` [PULL 82/91] hw/i386: Make pit a property of common x86 base machine type Michael S. Tsirkin
2022-05-16 10:40 ` [PULL 83/91] hw/i386: Make pic " Michael S. Tsirkin
2022-05-16 10:40 ` [PULL 84/91] hw/i386/amd_iommu: Fix IOMMU event log encoding errors Michael S. Tsirkin
2022-05-16 10:40 ` [PULL 85/91] virtio-net: setup vhost_dev and notifiers for cvq only when feature is negotiated Michael S. Tsirkin
2022-05-16 10:40 ` [PULL 86/91] virtio-net: align ctrl_vq index for non-mq guest for vhost_vdpa Michael S. Tsirkin
2022-05-16 10:40 ` [PULL 87/91] vhost-vdpa: fix improper cleanup in net_init_vhost_vdpa Michael S. Tsirkin
2022-05-16 10:40 ` [PULL 88/91] vhost-net: fix improper cleanup in vhost_net_start Michael S. Tsirkin
2022-05-16 10:40 ` [PULL 89/91] vhost-vdpa: backend feature should set only once Michael S. Tsirkin
2022-05-16 10:40 ` [PULL 90/91] vhost-vdpa: change name and polarity for vhost_vdpa_one_time_request() Michael S. Tsirkin
2022-05-16 10:40 ` [PULL 91/91] virtio-net: don't handle mq request in userspace handler for vhost-vdpa Michael S. Tsirkin
2022-05-16 19:01 ` [PULL 00/91] virtio,pc,pci: fixes,cleanups,features Richard Henderson
2022-05-16 20:05 ` Michael S. Tsirkin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20220516095448.507876-75-mst@redhat.com \
--to=mst@redhat.com \
--cc=amit@kernel.org \
--cc=arei.gonglei@huawei.com \
--cc=armbru@redhat.com \
--cc=david@redhat.com \
--cc=dgilbert@redhat.com \
--cc=eblake@redhat.com \
--cc=eric.auger@redhat.com \
--cc=fam@euphon.net \
--cc=hreitz@redhat.com \
--cc=jasowang@redhat.com \
--cc=jonah.palmer@oracle.com \
--cc=kraxel@redhat.com \
--cc=kwolf@redhat.com \
--cc=lvivier@redhat.com \
--cc=marcandre.lureau@redhat.com \
--cc=pbonzini@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@redhat.com \
--cc=virtio-fs@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).