Add virtio-mmio support
virtio is standard for network and mass storage drivers where the guest knows it is running in a virtual environment, cooperates with the hypervisor, and gives generally better performance.
Pawel Moll has posted kernel patches which allow a Linux ARM kernel to probe for a virtio transport at a memory location specified by a device tree blob, which allows us to get around the irritating problem of virtio being dependent on PCI and PCI generally not being present on ARM devboards. See https:/
We should implement the QEMU end of this to (a) provide a publicly available concrete implementation of the model end of things and (b) make virtio actually work usefully for us.
Blueprint information
- Status:
- Complete
- Approver:
- Michael Hope
- Priority:
- Medium
- Drafter:
- Peter Maydell
- Direction:
- Approved
- Assignee:
- None
- Definition:
- Superseded
- Series goal:
- Accepted for trunk
- Implementation:
- Started
- Milestone target:
- backlog
- Started by
- Peter Maydell
- Completed by
- Peter Maydell
Related branches
Related bugs
Sprints
Whiteboard
Judging from a couple of other non-PCI virtio transports in the qemu source code, this is <500 lines of code so should not be too hard to do. I have a test kernel from Pawel with the virtio hardwired in so we don't need to do the device tree bits immediately.
I now have a prototype which works for virtio-blk. However it looks like to get this upstream we will have to do some refactoring of the existing virtio code to make it a proper QEMU bus.
Work Items
Work items:
Design API for virtio qbus: TODO
Refactor core virtio layer to use this qbus: TODO
Reimplement virtio-pci to use qbus: TODO
Reimplement prototype virtio-mmio to use qbus: TODO
Test reimplemented virtio-pci: TODO
Test all the virtio-mmio plugins: TODO
Add back-compatibility command line/save restore layers: TODO
Post patches upstream: TODO
Implement any required fixes found in upstream review: TODO