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