
On Tue, 2017-01-10 at 03:23 -0500, Laine Stump wrote:
If there are multiple devices assigned to the different functions of a single PCI slot, they will not work properly if the device at function 0 doesn't have its "multi" attribute turned on, so it makes sense for libvirt to turn it on during PCI address assignment. Just in case a future change in the configuration eliminates the devices on all non-0 functions, and in case some guest OS would be confused by having the multi flag of function 0 modified to "no" at the next boot of the guest (it may seem like an inconsequential guest ABI change, but it *is* a guest ABI change). We are set multi during PCI address assignment (which happens in the domain post-parse callback) rather than at qemu runtime so that the setting will be stored in config and persist even in the case that the devices in the non-0 functions of the slot are later removed from the config - this is done to prevent a "silent" guest ABI change (although it can only happen after shutting down and restarting the guest, and although it may seem like an inconsequential guest ABI change, it *is* a guest ABI change to turn off the multi bit).
The commit messages seems to contain editing artifacts that I trust you'll get rid of before pushing. [...]
+ /* set multi attribute for devices at function 0 of + * any slot that has multiple functions in use + */ + virDomainPCIAddressSetAllMulti(def, addrs);
This will of course have to be changed now that virDomainPCIAddressSetAllMulti() takes a single argument. ACK -- Andrea Bolognani / Red Hat / Virtualization