VirtIO sound TODOs
Future TODOs following this PR https://github.com/au-ts/libvmm/pull/37
-
[ ] Merge
examples/virtio-sndwithexamples/virtio. Tracking issue: https://github.com/au-ts/libvmm/issues/60. This will involve multiplexing the shared bus on the OdroidC4. -
[ ] Virtualiser ownership bug: Currently if you play audio in a client VM then immediately stop the stream (CTRL+C) the virtualiser it sometimes errors saying "invalid owner id -1". This is probably something to do with it getting released before all frames have been responded to. Note you need to play a long sound file (e.g.,
cantina.cfrom old commit) to get this to appear. -
[ ] WFI Interrupt: I have implemented a prototype implementation which handles aarch64's "wait for interrupt" instruction to suspend the VM until a notification is recieved (on https://github.com/au-ts/libvmm/tree/virtio_snd_wfi). Currently the VMM gets a WFI but never gets a notification to wake the VM. This needs to be investigated.
-
[ ] Benchmarking: I implemented a benchmark which measures CPU usage of a native client client, virtualiser and driver VM (on https://github.com/au-ts/libvmm/tree/virtio_snd_bench). This needs to be redone with WFI interrupt handling.
-
[ ] Passthrough IRQ 5:
snd_driver_vmm.ccontains passthrough IRQ 5. We are not sure what this is but Linux doesn't boot without it. -
[ ] Use libuio: The userlevel driver doesn't use our UIO library at the moment. It may need some modifications to integrate.
-
[ ] Additional virtIO sound features: We currently don't support virtIO sound features such as the event queue, jacks or channel maps. This should be investigated.
-
[ ] Generic queues (ivanv): I don't like that we have multiple generic queue implementations, would be good to avoid if possible.
-
[ ] Userlevel program compilation: We currently use
zig ccto build userlevel programs as I have been unable to getaarch64-linux-gnu-gccorclangto work on macOS with Nix. Ideallyzigwouldn't be a requirement. -
[ ] CI simulation It would be good if the virtio-snd example was run and tested in the CI. A possible solution is described here https://github.com/au-ts/libvmm/pull/87#issuecomment-2229628678