
On Tue, 2019-01-15 at 10:23 -0500, Cole Robinson wrote:
On 01/15/2019 08:30 AM, Andrea Bolognani wrote: [...]
Basically VirtIO 0.9 requires IO space to be available, and 1.0 did away with that requirement because PCI Express, unlike conventional PCI, allows devices *not* to have IO space.
So transitional devices, which must work with both 0.9 and 1.0, can depend on IO space being available and as such will only work when plugged into conventional PCI slots, whereas non-transitional devices don't need IO space and can thus be plugged into either conventional PCI and PCI Express slots.
Ultimately, then, transitional (rather than non-transitional) devices are the ones that must be forced into conventional PCI slots.
Okay thanks for the correction, so that sounds like for NON_TRANSITIONAL we should also be forcing pcieFlags.
Not really. As explained above, non-transitional VirtIO devices work when plugged into both conventional PCI and PCI Express slots, so virtioFlags sounds more appropriate: by using pcieFlags you'd limit non-transitional devices to q35 guests, while they can work just fine on i440fx too.
I've made those changes and updated the branch here: https://github.com/crobinso/libvirt/tree/virtio
I'm only gonna cherry-pick commit 1/6 from the GitHub branch to avoid any ambiguity when there's a divergence between what you posted on the mailing list and what you pushed on GitHub: more specifically, I'm gonna be reviewing the former. -- Andrea Bolognani / Red Hat / Virtualization