From: "Alex Bennée" <alex.bennee@linaro.org>
To: Stefan Hajnoczi <stefanha@redhat.com>
Cc: qemu-devel@nongnu.org, slp@redhat.com, mst@redhat.com,
marcandre.lureau@redhat.com, mathieu.poirier@linaro.org,
viresh.kumar@linaro.org, Paolo Bonzini <pbonzini@redhat.com>,
Eric Auger <eric.auger@redhat.com>,
Thomas Huth <thuth@redhat.com>,
Laurent Vivier <lvivier@redhat.com>
Subject: Re: [PATCH v2 15/15] tests/qtest: enable tests for virtio-gpio
Date: Wed, 25 May 2022 23:35:53 +0100 [thread overview]
Message-ID: <878rqp1boj.fsf@linaro.org> (raw)
In-Reply-To: <Yo5WsY4Kcr8x8LQj@stefanha-x1.localdomain>
Stefan Hajnoczi <stefanha@redhat.com> writes:
> [[PGP Signed Part:Undecided]]
> On Tue, May 24, 2022 at 04:40:56PM +0100, Alex Bennée wrote:
>> We don't have a virtio-gpio implementation in QEMU and only
>> support a vhost-user backend. The QEMU side of the code is minimal so
>> it should be enough to instantiate the device and pass some vhost-user
>> messages over the control socket. To do this we hook into the existing
>> vhost-user-test code and just add the bits required for gpio.
>>
>> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
>> Cc: Viresh Kumar <viresh.kumar@linaro.org>
>> Cc: Paolo Bonzini <pbonzini@redhat.com>
>> Cc: Eric Auger <eric.auger@redhat.com>
>> Message-Id: <20220408155704.2777166-1-alex.bennee@linaro.org>
>>
>> ---
>> v2
>> - add more of the missing boilerplate
>> - don't request LOG_SHMD
>> - use get_features op
>> - report VIRTIO_F_VERSION_1
>> - more comments
>> ---
>> tests/qtest/libqos/virtio-gpio.h | 35 +++++++
>> tests/qtest/libqos/virtio-gpio.c | 171 +++++++++++++++++++++++++++++++
>> tests/qtest/libqos/virtio.c | 2 +-
>> tests/qtest/vhost-user-test.c | 66 ++++++++++++
>> tests/qtest/libqos/meson.build | 1 +
>> 5 files changed, 274 insertions(+), 1 deletion(-)
>> create mode 100644 tests/qtest/libqos/virtio-gpio.h
>> create mode 100644 tests/qtest/libqos/virtio-gpio.c
>>
>> diff --git a/tests/qtest/libqos/virtio-gpio.h b/tests/qtest/libqos/virtio-gpio.h
>> new file mode 100644
>> index 0000000000..f11d41bd19
>> --- /dev/null
>> +++ b/tests/qtest/libqos/virtio-gpio.h
>> @@ -0,0 +1,35 @@
>> +/*
>> + * virtio-gpio structures
>> + *
>> + * Copyright (c) 2022 Linaro Ltd
>> + *
>> + * SPDX-License-Identifier: GPL-2.0-or-later
>> + */
>> +
>> +#ifndef TESTS_LIBQOS_VIRTIO_GPIO_H
>> +#define TESTS_LIBQOS_VIRTIO_GPIO_H
>> +
>> +#include "qgraph.h"
>> +#include "virtio.h"
>> +#include "virtio-pci.h"
>> +
>> +typedef struct QVhostUserGPIO QVhostUserGPIO;
>> +typedef struct QVhostUserGPIOPCI QVhostUserGPIOPCI;
>> +typedef struct QVhostUserGPIODevice QVhostUserGPIODevice;
>> +
>> +struct QVhostUserGPIO {
>> + QVirtioDevice *vdev;
>> + QVirtQueue **queues;
>> +};
>> +
>> +struct QVhostUserGPIOPCI {
>> + QVirtioPCIDevice pci_vdev;
>> + QVhostUserGPIO gpio;
>> +};
>> +
>> +struct QVhostUserGPIODevice {
>> + QOSGraphObject obj;
>> + QVhostUserGPIO gpio;
>> +};
>> +
>> +#endif
>> diff --git a/tests/qtest/libqos/virtio-gpio.c b/tests/qtest/libqos/virtio-gpio.c
>> new file mode 100644
>> index 0000000000..762aa6695b
>> --- /dev/null
>> +++ b/tests/qtest/libqos/virtio-gpio.c
>> @@ -0,0 +1,171 @@
>> +/*
>> + * virtio-gpio nodes for testing
>> + *
>> + * Copyright (c) 2022 Linaro Ltd
>> + *
>> + * SPDX-License-Identifier: GPL-2.0-or-later
>> + */
>> +
>> +#include "qemu/osdep.h"
>> +#include "standard-headers/linux/virtio_config.h"
>> +#include "../libqtest.h"
>> +#include "qemu/module.h"
>> +#include "qgraph.h"
>> +#include "virtio-gpio.h"
>> +
>> +static QGuestAllocator *alloc;
>> +
>> +static void virtio_gpio_cleanup(QVhostUserGPIO *gpio)
>> +{
>> + QVirtioDevice *vdev = gpio->vdev;
>> + int i;
>> +
>> + for (i = 0; i < 2; i++) {
>> + qvirtqueue_cleanup(vdev->bus, gpio->queues[i], alloc);
>> + }
>> + g_free(gpio->queues);
>> +}
>> +
>> +/*
>> + * This handles the VirtIO setup from the point of view of the driver
>> + * frontend and therefor doesn't present any vhost specific features
>> + * and in fact masks of the re-used bit.
>> + */
>> +static void virtio_gpio_setup(QVhostUserGPIO *gpio)
>> +{
>> + QVirtioDevice *vdev = gpio->vdev;
>> + uint64_t features;
>> + int i;
>> +
>> + features = qvirtio_get_features(vdev);
>> + features &= ~QVIRTIO_F_BAD_FEATURE;
>
> This looks questionable. qvirtio_get_features() should return VIRTIO
> feature bits. Is QVIRTIO_F_BAD_FEATURE masked out here because
> qvirtio_get_features() is returning raw vhost-user feature bits instead
> and you want to get rid of VHOST_USER_F_PROTOCOL_FEATURES?
Well it's an invalid bit for the driver/frontend<->hw/backend path -
although maybe we should error if we saw it?
>
> [[End of PGP Signed Part]]
--
Alex Bennée
next prev parent reply other threads:[~2022-05-25 22:39 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-05-24 15:40 [PATCH v2 00/15] virtio-gpio and various virtio cleanups Alex Bennée
2022-05-24 15:40 ` [PATCH v2 01/15] contrib/vhost-user-blk: fix 32 bit build and enable Alex Bennée
2022-05-25 16:03 ` Stefan Hajnoczi
2022-05-31 4:29 ` Raphael Norwitz
2022-05-24 15:40 ` [PATCH v2 02/15] include/hw/virtio: more comment for VIRTIO_F_BAD_FEATURE Alex Bennée
2022-05-25 16:04 ` Stefan Hajnoczi
2022-05-24 15:40 ` [PATCH v2 03/15] include/hw/virtio: document vhost_get_features Alex Bennée
2022-05-25 16:06 ` Stefan Hajnoczi
2022-05-24 15:40 ` [PATCH v2 04/15] include/hw/virtio: document vhost_ack_features Alex Bennée
2022-05-25 16:11 ` Stefan Hajnoczi
2022-05-24 15:40 ` [PATCH v2 05/15] hw/virtio: add boilerplate for vhost-user-gpio device Alex Bennée
2022-06-10 8:37 ` Vincent Whitchurch
2022-07-06 13:37 ` Alex Bennée
2022-05-24 15:40 ` [PATCH v2 06/15] hw/virtio: add vhost-user-gpio-pci boilerplate Alex Bennée
2022-05-24 15:40 ` [PATCH v2 07/15] tests/qtest: pass stdout/stderr down to subtests Alex Bennée
2022-05-24 15:43 ` Thomas Huth
2022-05-24 15:40 ` [PATCH v2 08/15] tests/qtest: add a timeout for subprocess_run_one_test Alex Bennée
2022-05-24 15:46 ` Thomas Huth
2022-05-24 15:40 ` [PATCH v2 09/15] tests/qtest: use qos_printf instead of g_test_message Alex Bennée
2022-05-24 15:40 ` [PATCH v2 10/15] tests/qtest: catch unhandled vhost-user messages Alex Bennée
2022-05-24 15:40 ` [PATCH v2 11/15] tests/qtest: use g_autofree for test_server_create_chr Alex Bennée
2022-05-24 15:40 ` [PATCH v2 12/15] tests/qtest: plain g_assert for VHOST_USER_F_PROTOCOL_FEATURES Alex Bennée
2022-06-02 16:26 ` Thomas Huth
2022-05-24 15:40 ` [PATCH v2 13/15] tests/qtest: implement stub for VHOST_USER_GET_CONFIG Alex Bennée
2022-05-24 15:40 ` [PATCH v2 14/15] tests/qtest: add a get_features op to vhost-user-test Alex Bennée
2022-05-24 15:40 ` [PATCH v2 15/15] tests/qtest: enable tests for virtio-gpio Alex Bennée
2022-05-25 16:17 ` Stefan Hajnoczi
2022-05-25 22:35 ` Alex Bennée [this message]
2022-05-26 8:06 ` Stefan Hajnoczi
2022-05-25 16:14 ` [PATCH v2 00/15] virtio-gpio and various virtio cleanups Stefan Hajnoczi
2022-07-07 13:38 ` Alex Bennée
2022-07-07 14:03 ` Stefan Hajnoczi
2022-07-07 15:20 ` Alex Bennée
2022-07-07 16:43 ` Stefan Hajnoczi
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=878rqp1boj.fsf@linaro.org \
--to=alex.bennee@linaro.org \
--cc=eric.auger@redhat.com \
--cc=lvivier@redhat.com \
--cc=marcandre.lureau@redhat.com \
--cc=mathieu.poirier@linaro.org \
--cc=mst@redhat.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=slp@redhat.com \
--cc=stefanha@redhat.com \
--cc=thuth@redhat.com \
--cc=viresh.kumar@linaro.org \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.