FROMLIST: kvmtool: add support for modern virtio-pci

This is a first go at adding support for the modern (based on the 1.0 virtio
spec) virtio-pci implementation.

kvmtool makes it simple to add additional transports such as this
because of it's layering, so we are able to add it as a 3rd (after legacy
virtio-pci and virtio-mmio) transport layer, and still allow users to choose
to use either the legacy or the modern implementations (but setting the modern
one as default.

The changes to the virtio devices are mostly the result of needing to support
32bit features, and the different initialization method for VQs.

It's worth noting that supporting v1.0 implies any_layout, but some of our
devices made assumptions about the layout - which I've fixed. But it's worth to
keep in mind that some probably went unnoticed.

To sum it up: this is a lightly tested version for feedback about the design
and to weed out major bugs people notice. Feedback is very welcome!

Signed-off-by: Sasha Levin <sasha.levin at oracle.com>

(am from
https://lists.linuxfoundation.org/pipermail/virtualization/2015-November/030741.html)

Change-Id: I2549883371739cedd5fb144941740efac8fcd911
Reviewed-on: https://chromium-review.googlesource.com/442091
Commit-Ready: Zach Reizner <zachr@chromium.org>
Tested-by: Zach Reizner <zachr@chromium.org>
Reviewed-by: Chirantan Ekbote <chirantan@chromium.org>
22 files changed