On Tue, May 27, 2025 at 10:35 PM Mauro Carvalho Chehab
<mchehab+hua...@kernel.org> wrote:
>
> Em Tue, 27 May 2025 22:21:42 +0900
> Alexandre Courbot <gnu...@gmail.com> escreveu:
>
> > On Tue, May 27, 2025 at 6:13 PM Mauro Carvalho Chehab
> > <mchehab+hua...@kernel.org> wrote:
> > >
> > > Em Tue, 27 May 2025 15:14:50 +0900
> > > "Alexandre Courbot" <gnu...@gmail.com> escreveu:
> > >
> > > > Hi Mauro,
> > > >
> > > > On Mon May 26, 2025 at 9:13 PM JST, Mauro Carvalho Chehab wrote:
> > > > > Hi Michael,
> > > > >
> > > > > Em Sat, 12 Apr 2025 13:08:01 +0900
> > > > > Alexandre Courbot <gnu...@gmail.com> escreveu:
> > > > >
> > > > >> Add the first version of the virtio-media driver.
> > > > >>
> > > > >> This driver acts roughly as a V4L2 relay between user-space and the
> > > > >> virtio virtual device on the host, so it is relatively simple, yet
> > > > >> unconventional. It doesn't use VB2 or other frameworks typically 
> > > > >> used in
> > > > >> a V4L2 driver, and most of its complexity resides in correctly and
> > > > >> efficiently building the virtio descriptor chain to pass to the host,
> > > > >> avoiding copies whenever possible. This is done by
> > > > >> scatterlist_builder.[ch].
> > > > >>
> > > > >> virtio_media_ioctls.c proxies each supported ioctl to the host, using
> > > > >> code generated through macros for ioctls that can be forwarded 
> > > > >> directly,
> > > > >> which is most of them.
> > > > >>
> > > > >> virtio_media_driver.c provides the expected driver hooks, and support
> > > > >> for mmapping and polling.
> > > > >>
> > > > >>  This version supports MMAP buffers, while USERPTR buffers can also 
> > > > >> be
> > > > >>  enabled through a driver option. DMABUF support is still pending.
> > > > >
> > > > > It sounds that you applied this one at the virtio tree, but it hasn't
> > > > > being reviewed or acked by media maintainers.
> > > > >
> > > > > Please drop it.
> > > > >
> > > > > Alexandre,
> > > > >
> > > > > Please send media patches to media maintainers, c/c other subsystem
> > > > > maintainers, as otherwise they might end being merged without a
> > > > > proper review.
> > > >
> > > > Sorry about that, I put everyone in "To:" without giving it a second
> > > > thought.
> > > >
> > > > >
> > > > > In this particular case, we need to double-check if this won't cause
> > > > > any issues, in special with regards to media locks and mutexes.
> > > >
> > > > Agreed, I am not 100% confident about that part myself.
> > > >
> > > > >
> > > > > I'll try to look on it after this merge window, as it is too late
> > > > > for it to be applied during this one.
> > > >
> > > > Appreciate that - given the high traffic on the list I was worried that
> > > > this patch would eventually be overlooked. Not making it for this merge
> > > > window should not be a problem, so please take the time you need.
> > >
> > > Provided that your patch was caught by patchwork, it won't be lost:
> > >         
> > > https://patchwork.linuxtv.org/project/linux-media/patch/20250412-virtio-media-v3-1-97dc94c18...@gmail.com/
> > >
> > > Please notice that our CI got a number of checkpatch issues there.
> > > Please check and fix the non-false-positive ones.
> >
> > Will do. The macro-related ones are false-positives AFAICT. Some of
> > the "lines should not end with a '('" are actually the result of
> > applying clang-format with the kernel-provided style...
>
> I don't know any lint tool that honors kernel style. The best one
> is checkpatch with the auto-correcting parameter in pedantic mode,
> but still one needs to manually review its output.
>
> >
> > >
> > > Btw, I was looking at:
> > >
> > >         https://github.com/chromeos/virtio-media
> > >
> > > (I'm assuming that this is the QEMU counterpart, right?)
> >
> > crosvm actually, but QEMU support is also being worked on.
>
> Do you have already QEMU patches? The best is to have the Kernel driver
> submitted altogether with QEMU, as Kernel developers need it to do the
> tests. In my case, I never use crosvm, and I don't have any Chromebook
> anymore.

IIRC Albert Esteve was working on this, maybe he can share the current status.

Note that crosvm does not require a Chromebook, you can build and run
it pretty easily on a regular PC. I have put together a document to
help with that:

https://github.com/chromeos/virtio-media/blob/main/TRY_IT_OUT.md

It also shows how to proxy a host UVC camera into the guest and use
some of the "fake" devices I talked about earlier. If following these
steps is too much friction, just reading through the document should
give you a decent idea of what virtio-media can do.

>
> > > And I noticed something weird there:
> > >
> > >         "Unsupported ioctls
> > >
> > >          A few ioctls are replaced by other, more suitable mechanisms. If 
> > > being requested these ioctls, the device must return the same response as 
> > > it would for an unknown ioctl, i.e. ENOTTY.
> > >
> > >             VIDIOC_QUERYCAP is replaced by reading the configuration area.
> > >             VIDIOC_DQBUF is replaced by a dedicated event.
> > >             VIDIOC_DQEVENT is replaced by a dedicated event."
> > >
> > > While this could be ok for cromeOS, this will be broken for guests with
> > > Linux, as all Linux applications rely on VIDIOC_QUERYCAP and VIDIOC_DQBUF
> > > to work. Please implement support for it, as otherwise we won't even be
> > > able to test the driver with the v4l2-compliance tool (*).
> >
> > The phrasing was a bit confusing. The guest driver does support these
> > ioctls, and passes v4l2-compliance. So there is no problem here.
>
> Please add v4l2-compliance output on the next patch series.

Certainly. Note that the output is dependent on what the host provides
for a device. If it e.g. proxies something that is not fully
compliant, the guest will reflect the same errors.

>
> > Where these ioctls are not supported is between the guest and the
> > host, i.e. as ioctls encapsulated into a virtio request. For QUERYCAP,
> > that's because the virtio configuration area already provides the same
> > information. For DQBUF and DQEVENT, that's because we want to serve
> > these asynchronously for performance reasons (hence the dedicated
> > events).
> >
> > But these differences don't affect guest user applications which will
> > be able to perform these ioctls exactly as they expect.
>
> OK. Better to let it clear then at the documentation.
>
> > >
> > > (*) Passing at v4l2-compliance is a requirement for any media driver
> > >     to be merged.
> > >
> > > With regards to testing, what's the expected testing scenario?
> > > My guess is that, as a virtio device, a possible test scenario would be
> > > to have the UVC camera from the host OS mapped using virtio-camera into
> > > the guest OS, allowing a V4L2 application running at the guest to map the
> > > camera from the host, right?
> >
> > That's one of the scenarios, yes.
>
> Ok, this is the easiest test scenario for media developers.
>
> > Another one is to expose an accelerated decoder on the host to the guest.
>
> > One can also create
> > "fake" devices backed by software on the host for testing purposes.
>
> That sounds interesting. It probably makes sense to have some test
> scenario using such fake devices plus v4l2-compliance test to check
> for regressions running on some CI engine.

Yes, regression catching in a CI is one of the use-cases we thought about.

>
> > That's actually the benefit of using V4L2 as a guest/host protocol:
> > the same guest and the same software stack on the host can be used to

I made a typo here: "the same guest DRIVER". That's an important point. :)

Cheers,
Alex.

Reply via email to