From: Vincent Whitchurch <vincent.whitchurch@axis.com>
To: Johannes Berg <johannes@sipsolutions.net>
Cc: Brendan Higgins <brendanhiggins@google.com>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
kernel <kernel@axis.com>,
"devicetree@vger.kernel.org" <devicetree@vger.kernel.org>,
"linux-um@lists.infradead.org" <linux-um@lists.infradead.org>,
"shuah@kernel.org" <shuah@kernel.org>,
"linux-kselftest@vger.kernel.org"
<linux-kselftest@vger.kernel.org>,
"jic23@kernel.org" <jic23@kernel.org>,
"linux-iio@vger.kernel.org" <linux-iio@vger.kernel.org>,
"lgirdwood@gmail.com" <lgirdwood@gmail.com>,
"broonie@kernel.org" <broonie@kernel.org>,
"a.zummo@towertech.it" <a.zummo@towertech.it>,
"alexandre.belloni@bootlin.com" <alexandre.belloni@bootlin.com>,
"linux-rtc@vger.kernel.org" <linux-rtc@vger.kernel.org>,
"corbet@lwn.net" <corbet@lwn.net>,
"linux-doc@vger.kernel.org" <linux-doc@vger.kernel.org>
Subject: Re: [RFC v1 07/10] iio: light: opt3001: add roadtest
Date: Tue, 29 Mar 2022 16:43:19 +0200 [thread overview]
Message-ID: <20220329144319.GA4474@axis.com> (raw)
In-Reply-To: <1e61b0f21794e67fb4e87dc41fab90829d3c7cd6.camel@sipsolutions.net>
On Fri, Mar 18, 2022 at 09:09:02PM +0100, Johannes Berg wrote:
> On Fri, 2022-03-18 at 16:49 +0100, Vincent Whitchurch wrote:
> > - We use virtio-i2c and virtio-gpio and use virtio-uml which uses the
> > vhost-user API to communicate from UML to the backend. The latest
> > version of QEMU has support for vhost-user-i2c, but vhost-user-gpio
> > doesn't seem to have been merged yet, so work is needed on the QEMU
> > side. This will also be true for other buses in the future, if they
> > are implemented with new virtio devices.
> >
> > - For MMIO, UML has virtio-mmio which allows implementing any PCIe
> > device (and by extension any platform device) outside of UML, but last
> > I checked, upstream QEMU did not have something similar.
>
> I think you have this a bit fuzzy.
>
> The virtio_uml[.c] you speak of is the "bus" driver for virtio in UML.
> Obviously, qemu has support for virtio, so you don't need those bits.
>
> Now, virtio_uml is actually the virtio (bus) driver inside the kernel,
> like you'd have virtio-mmio/virtio-pci in qemu. However, virtio_uml
> doesn't implement the devices in the hypervisor, where most qemu devices
> are implemented, but uses vhost-user to run the device implementation in
> a separate userspace. [1]
>
> Now we're talking about vhost-user to talk to the device, and qemu
> supports this as well, in fact the vhost-user spec is part of qemu:
> https://git.qemu.org/?p=qemu.git;a=blob;f=docs/system/devices/vhost-user.rst;h=86128114fa3788a73679f0af38e141021087c828;hb=1d60bb4b14601e38ed17384277aa4c30c57925d3
> https://www.qemu.org/docs/master/interop/vhost-user.html
>
> The docs on how to use it are here:
> https://www.qemu.org/docs/master/system/devices/vhost-user.html
>
> So once you have a device implementation (regardless of whether it's for
> use with any of the virtio-i2c, arch/um/drivers/virt-pci.c, virtio-gpio,
> virtio-net, ... drivers) you can actually connect it to virtual machines
> running as UML or in qemu.
I'm aware of vhost-user, but AFAICS QEMU needs glue for each device type
to be able to actually hook up vhost-user implementations to the devices
it exposes to the guest via the virtio PCI device. See e.g.
hw/virtio/vhost-user-i2c-pci.c and hw/virtio/vhost-user-i2c.c in QEMU.
That is what I meant was missing for virtio-gpio, there seems to be an
in-progress patch set for that here though:
https://lore.kernel.org/all/cover.1641987128.git.viresh.kumar@linaro.org/
Similarly, glue for something like arch/um/drivers/virt-pci.c does not
exist in QEMU.
Or perhaps you are implying that hw/virtio/vhost-user-i2c* in QEMU are
not strictly needed?
> (Actually, that's not strictly true today since it's
> arch/um/drivers/virt-pci.c and I didn't get a proper device ID assigned
> etc since it was for experimentation, I guess if we make this more
> commonly used then we should move it to drivers/pci/controller/virtio-
> pci.c and actually specify it in the OASIS virtio spec., at the very
> least it'd have to be possible to compile this and lib/logic_iomem.c on
> x86, but that's possible. Anyway I think PCI(e) is probably low on your
> list of things ...)
PCI is not that interesting, no, but platform devices are. I did some
experiments early on with arch/um/drivers/virt-pci.c and a corresponding
backend along with a simple PCI driver which probes all devicetree nodes
under it, and I was able to use this to get some platform drivers
working.
>
> > - Also, some paths in this driver needs a modification to be tested
> > under roadtest. It uses wait_event_timeout() with a fixed value, but
> > we cannot guarantee that this constraint is met in the test
> > environment since it depends on things like CPU load on the host.
> >
> > (Also, we use UML's "time travel" feature which essentially
> > fast-forwards through idle time, so the constraint can never be met
> > in practice.)
>
> Wohoo! This makes me very happy, finally somebody else who uses it :-)
Yes, thanks for that feature, it works well to speed up tests and also
has a knack for triggering race conditions (the RTC use-after-free for
example).
Time travel however sometimes triggers some WARN_ONs from the core
timekeeping code. I haven't seen them when running the test suites, but
they show up if the system under UML is idle for several (wall time)
seconds. I haven't had a chance to investigate it further though, but I
can dig up the splats if you are interested.
next prev parent reply other threads:[~2022-03-29 14:43 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-03-11 16:24 [RFC v1 00/10] roadtest: a driver testing framework Vincent Whitchurch
2022-03-11 16:24 ` [RFC v1 02/10] roadtest: add C backend Vincent Whitchurch
2022-03-11 16:24 ` [RFC v1 03/10] roadtest: add framework Vincent Whitchurch
2022-03-11 16:24 ` [RFC v1 04/10] roadtest: add base config Vincent Whitchurch
2022-03-11 16:24 ` [RFC v1 05/10] roadtest: add build files Vincent Whitchurch
2022-03-11 16:24 ` [RFC v1 06/10] roadtest: add documentation Vincent Whitchurch
2022-03-11 16:24 ` [RFC v1 07/10] iio: light: opt3001: add roadtest Vincent Whitchurch
2022-03-14 23:11 ` Brendan Higgins
2022-03-18 15:49 ` Vincent Whitchurch
2022-03-18 20:09 ` Johannes Berg
2022-03-29 14:43 ` Vincent Whitchurch [this message]
2022-03-29 14:50 ` Johannes Berg
2022-03-29 14:52 ` Johannes Berg
2022-03-11 16:24 ` [RFC v1 08/10] iio: light: vcnl4000: " Vincent Whitchurch
2022-03-20 17:02 ` Jonathan Cameron
2022-04-05 13:48 ` Vincent Whitchurch
2022-04-06 13:08 ` Jonathan Cameron
2022-04-14 10:20 ` Vincent Whitchurch
2022-03-11 16:24 ` [RFC v1 09/10] regulator: tps62864: " Vincent Whitchurch
2022-03-11 18:06 ` Mark Brown
2022-03-17 15:13 ` Vincent Whitchurch
2022-03-17 17:53 ` Mark Brown
2022-04-05 14:02 ` Vincent Whitchurch
2022-03-11 16:24 ` [RFC v1 10/10] rtc: pcf8563: " Vincent Whitchurch
2022-03-14 22:24 ` [RFC v1 00/10] roadtest: a driver testing framework Brendan Higgins
2022-03-17 16:09 ` Vincent Whitchurch
[not found] ` <20220311162445.346685-2-vincent.whitchurch@axis.com>
2022-03-24 13:00 ` [RFC v1 01/10] roadtest: import libvhost-user from QEMU Johannes Berg
2022-04-05 13:54 ` Vincent Whitchurch
2022-04-18 19:44 ` [RFC v1 00/10] roadtest: a driver testing framework Jonathan Cameron
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=20220329144319.GA4474@axis.com \
--to=vincent.whitchurch@axis.com \
--cc=a.zummo@towertech.it \
--cc=alexandre.belloni@bootlin.com \
--cc=brendanhiggins@google.com \
--cc=broonie@kernel.org \
--cc=corbet@lwn.net \
--cc=devicetree@vger.kernel.org \
--cc=jic23@kernel.org \
--cc=johannes@sipsolutions.net \
--cc=kernel@axis.com \
--cc=lgirdwood@gmail.com \
--cc=linux-doc@vger.kernel.org \
--cc=linux-iio@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=linux-rtc@vger.kernel.org \
--cc=linux-um@lists.infradead.org \
--cc=shuah@kernel.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 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).