Commit f9a8f5812607 moved protocol_features to the vhost-user backend.
As a result, VhostStatus.protocol_features is only populated for
vhost-user devices.
For an active kernel vhost device, HMP info virtio-status and QMP
x-query-virtio-status crashes now because of unset protocol-features.
Make protocol-features optional in VhostStatus and skip dumping a
missing object in HMP.
For QMP we can change the x-query-virtio-status command semantics
because it is unstable.
Enable corresponding test, it works now.
Fixes: f9a8f5812607 ("vhost: move protocol_features to vhost_user")
Co-authored-by: Nikolay Kuratov <[email protected]>
Signed-off-by: Vladimir Sementsov-Ogievskiy <[email protected]>
---
hw/virtio/virtio-hmp-cmds.c | 6 ++++--
qapi/virtio.json | 5 +++--
tests/functional/x86_64/test_virtio_status.py | 1 -
3 files changed, 7 insertions(+), 5 deletions(-)
diff --git a/hw/virtio/virtio-hmp-cmds.c b/hw/virtio/virtio-hmp-cmds.c
index e5da6f00699..5b08a06ec42 100644
--- a/hw/virtio/virtio-hmp-cmds.c
+++ b/hw/virtio/virtio-hmp-cmds.c
@@ -176,8 +176,10 @@ void hmp_virtio_status(MonitorHMP *hmp, const QDict *qdict)
hmp_virtio_dump_features(hmp, s->vhost_dev->features);
monitor_hmp_printf(hmp, " Acked features:\n");
hmp_virtio_dump_features(hmp, s->vhost_dev->acked_features);
- monitor_hmp_printf(hmp, " Protocol features:\n");
- hmp_virtio_dump_protocols(hmp, s->vhost_dev->protocol_features);
+ if (s->vhost_dev->protocol_features) {
+ monitor_hmp_printf(hmp, " Protocol features:\n");
+ hmp_virtio_dump_protocols(hmp, s->vhost_dev->protocol_features);
+ }
}
qapi_free_VirtioStatus(s);
diff --git a/qapi/virtio.json b/qapi/virtio.json
index 1fc4e38a44d..f8e699a0e4e 100644
--- a/qapi/virtio.json
+++ b/qapi/virtio.json
@@ -85,7 +85,8 @@
#
# @acked-features: vhost_dev acked_features
#
-# @protocol-features: vhost_dev protocol_features
+# @protocol-features: vhost-user protocol features. Present only for
+# vhost-user devices.
#
# @max-queues: vhost_dev max_queues
#
@@ -104,7 +105,7 @@
'vq-index': 'int',
'features': 'VirtioDeviceFeatures',
'acked-features': 'VirtioDeviceFeatures',
- 'protocol-features': 'VhostDeviceProtocols',
+ '*protocol-features': 'VhostDeviceProtocols',
'max-queues': 'uint64',
'backend-cap': 'uint64',
'log-enabled': 'bool',
diff --git a/tests/functional/x86_64/test_virtio_status.py
b/tests/functional/x86_64/test_virtio_status.py
index 1e72c713cc6..a88823004f8 100755
--- a/tests/functional/x86_64/test_virtio_status.py
+++ b/tests/functional/x86_64/test_virtio_status.py
@@ -45,7 +45,6 @@ def check_commands(self, vm):
vm.cmd("x-query-virtio-status", path=self.VIRTIO_PATH)
@skipIfMissingCommands("unshare")
- @skipIfMissingEnv("QEMU_FAILING_TESTS")
def test_vhost(self):
self.require_netdev("tap")
for device in ("/dev/net/tun", "/dev/vhost-net"):
--
2.43.0