Hi, After much slogging through the vhost-user code I've gotten the virtio-gpio device working again. The core change in pushing the responsibility for VHOST_USER_F_PROTOCOL_FEATURES down to the vhost-user layer (which knows it needs it). We still need to account for that in virtio-gpio because the result of the negotiating protocol features is the vrings start disabled so the stub needs to explicitly enable them. I did consider pushing this behaviour explicitly into vhost_dev_start but that would have required un-picking it from vhost-net (which is the only other device which uses protocol features AFAICT - but is a measure more complex in it's setup).
As last time there are a whole series of clean-ups and doc tweaks. I don't know if any are trivial enough to sneak into later RCs but it shouldn't be a problem to wait until the tree re-opens. There is a remaining issue that a --enable-sanitizers build fails for qos-test due to leaks. It shows up as a leak from: Direct leak of 240 byte(s) in 1 object(s) allocated from: #0 0x7fc5a3f2a037 in __interceptor_calloc ../../../../src/libsanitizer/asan/asan_malloc_linux.cpp:154 #1 0x7fc5a2e5cda0 in g_malloc0 ../../../glib/gmem.c:136 #2 0x55ce773cc728 in virtio_device_realize ../../hw/virtio/virtio.c:3691 #3 0x55ce7784ed7e in device_set_realized ../../hw/core/qdev.c:553 #4 0x55ce77862d0c in property_set_bool ../../qom/object.c:2273 I'm not entirely sure what the allocation is because it gets inlined in the virtio_device_realize call. Perhaps it's the QOM object itself which is never gracefully torn down at the end of the test? However when I attempted to bisect I found master was broken as well. For example in my arm/aarch64-softmmu build we see 5 failures: Summary of Failures: 3/48 qemu:qtest+qtest-aarch64 / qtest-aarch64/migration-test ERROR 96.15s killed by signal 6 SIGABRT 9/48 qemu:qtest+qtest-aarch64 / qtest-aarch64/qos-test ERROR 32.50s killed by signal 6 SIGABRT 11/48 qemu:qtest+qtest-arm / qtest-arm/qos-test ERROR 26.93s killed by signal 6 SIGABRT 20/48 qemu:qtest+qtest-aarch64 / qtest-aarch64/device-introspect-test ERROR 5.17s killed by signal 6 SIGABRT 45/48 qemu:qtest+qtest-arm / qtest-arm/device-introspect-test ERROR 4.97s killed by signal 6 SIGABRT Of which the qos-tests are the only new ones. I suspect something must be preventing the other stuff being exercised in our CI system. Alex Bennée (19): include/hw/virtio: more comment for VIRTIO_F_BAD_FEATURE include/hw: document vhost_dev feature life-cycle hw/virtio: fix some coding style issues hw/virtio: log potentially buggy guest drivers block/vhost-user-blk-server: don't expose VHOST_USER_F_PROTOCOL_FEATURES hw/virtio: incorporate backend features in features hw/virtio: gracefully handle unset vhost_dev vdev hw/virtio: handle un-configured shutdown in virtio-pci hw/virtio: fix vhost_user_read tracepoint hw/virtio: add some vhost-user trace events tests/qtest: pass stdout/stderr down to subtests tests/qtest: add a timeout for subprocess_run_one_test tests/qtest: use qos_printf instead of g_test_message tests/qtest: catch unhandled vhost-user messages tests/qtest: plain g_assert for VHOST_USER_F_PROTOCOL_FEATURES tests/qtest: add assert to catch bad features tests/qtest: implement stub for VHOST_USER_GET_CONFIG tests/qtest: add a get_features op to vhost-user-test tests/qtest: enable tests for virtio-gpio Viresh Kumar (2): hw/virtio: add boilerplate for vhost-user-gpio device hw/virtio: add vhost-user-gpio-pci boilerplate include/hw/virtio/vhost-user-gpio.h | 35 +++ include/hw/virtio/vhost.h | 3 + include/hw/virtio/virtio.h | 7 +- tests/qtest/libqos/virtio-gpio.h | 35 +++ block/export/vhost-user-blk-server.c | 3 +- hw/virtio/vhost-user-gpio-pci.c | 69 +++++ hw/virtio/vhost-user-gpio.c | 414 +++++++++++++++++++++++++++ hw/virtio/vhost-user.c | 20 +- hw/virtio/vhost.c | 16 +- hw/virtio/virtio-pci.c | 9 +- hw/virtio/virtio.c | 7 + tests/qtest/libqos/virtio-gpio.c | 171 +++++++++++ tests/qtest/libqos/virtio.c | 4 +- tests/qtest/qos-test.c | 8 +- tests/qtest/vhost-user-test.c | 172 +++++++++-- hw/virtio/Kconfig | 5 + hw/virtio/meson.build | 2 + hw/virtio/trace-events | 9 + tests/qtest/libqos/meson.build | 1 + 19 files changed, 956 insertions(+), 34 deletions(-) create mode 100644 include/hw/virtio/vhost-user-gpio.h create mode 100644 tests/qtest/libqos/virtio-gpio.h create mode 100644 hw/virtio/vhost-user-gpio-pci.c create mode 100644 hw/virtio/vhost-user-gpio.c create mode 100644 tests/qtest/libqos/virtio-gpio.c -- 2.30.2