On Tue, Jul 26, 2022 at 08:21:29PM +0100, Alex Bennée wrote:
> 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.
Right. Still I think some are fixes we should merge now.
I am thinking patches 5, 7,8,9 ? 6 if it makes backporting
much easier. WDYT? If you agree pls separate bugfixes in
series I can apply. Thanks!
> 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