Hello Matias, On 14.09.2023 00:04, Matias Ezequiel Vara Larsen wrote:
Hello, This email is to report a behavior of the Linux virtio-sound driver that looks like it is not conforming to the VirtIO specification. The kernel driver is moving buffers from the used ring to the available ring without knowing if the content has been updated from the user. If the device picks up buffers from the available ring just after it is notified, it happens that the content is old. This problem can be fixed by waiting a period of time after the device dequeues a buffer from the available ring. The driver should not be allowed to change the content of a buffer in the available ring. When buffers are enqueued in the available ring, the device can consume them immediately. 1. Is the actual driver implementation following the spec?
If the Linux virtio sound driver violates a specification, then there must be a conformance statement that the driver does not follow. As far as I know, there is no such thing at the moment. During the design discussion, it was decided that the driver should implement typical cyclic DMA logic. And the main idea behind was that, unlike many other virtio devices, the sound device is isochronous. It consumes or supplies data at a fixed rate. Which means that the device (in an idealized case) should access buffers in virtqueues not as soon as they are available, but when required. Whether this is a good idea or not is a debatable question.
2. Shall the spec be extended to support such a use-case?
There are some things you can try without having to change the spec. The driver now handles RW and MMAP substream access modes in the same way. Someone could try to change the handling of RW mode exactly as you describe, because the UAPI allows it. But this logic cannot be reliably applied to MMAP mode. Best regards, -- Anton Yakovlev Senior Software Engineer OpenSynergy GmbH Rotherstr. 20, 10245 Berlin _______________________________________________ Virtualization mailing list Virtualization@xxxxxxxxxxxxxxxxxxxxxxxxxx https://lists.linuxfoundation.org/mailman/listinfo/virtualization