
On Wed, Jan 16, 2019 at 10:41:59AM +0100, Andrea Bolognani wrote:
On Tue, 2019-01-15 at 17:02 +0000, Daniel P. Berrangé wrote:
On Tue, Jan 15, 2019 at 02:30:14PM +0100, 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.
Yes, the existing devices fail when placed in a PCI-X slot with certain guest OS. The -transitional devices are functionally identical to the existing devices. They serve as a hint to libvirt that it should never place them in a PCI-X slot.
Not quite: existing devices (virtio-*-pci) will change their behavior based on the slot they're plugged into, so they will show up as non-transitional when connected to a PCI Express slot and as transitional otherwise.
We're only ever going to plug -transitional devices into PCI slots, not PCI-X slots. So the magic behaviour of the existing devices won't come into effect in libvirt's usage, when the XML has request a transitional device. Regards, Daniel -- |: https://berrange.com -o- https://www.flickr.com/photos/dberrange :| |: https://libvirt.org -o- https://fstop138.berrange.com :| |: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|