Laine Stump 18c24bc686 qemu: assign correct type of PCI address for vhost-scsi when using pcie-root
Commit 10c73bf1 fixed a bug that I had introduced back in commit
70249927 - if a vhost-scsi device had no manually assigned PCI
address, one wouldn't be assigned automatically. There was a slight
problem with the logic of the fix though - in the case of domains with
pcie-root (e.g. those with a q35 machinetype),
qemuDomainDeviceCalculatePCIConnectFlags() will attempt to determine
if the host-side PCI device is Express or legacy by examining sysfs
based on the host-side PCI address stored in
hostdev->source.subsys.u.pci.addr, but that part of the union is only
valid for PCI hostdevs, *not* for SCSI hostdevs. So we end up trying
to read sysfs for some probably-non-existent device, which fails, and
the function virPCIDeviceIsPCIExpress() returns failure (-1).

By coincidence, the return value is being examined as a boolean, and
since -1 is true, we still end up assigning the vhost-scsi device to
an Express slot, but that is just by chance (and could fail in the
case that the gibberish in the "hostside PCI address" was the address
of a real device that happened to be legacy PCI).

Since (according to Paolo Bonzini) vhost-scsi devices appear just like
virtio-scsi devices in the guest, they should follow the same rules as
virtio devices when deciding whether they should be placed in an
Express or a legacy slot. That's accomplished in this patch by
returning early with virtioFlags, rather than erroneously using
hostdev->source.subsys.u.pci.addr. It also adds a test case for PCIe
to assure it doesn't get broken in the future.
2018-01-20 22:01:24 -05:00
..
2017-11-20 13:22:48 +01:00
2018-01-18 15:04:18 +01:00
2017-11-22 11:27:40 +01:00
2018-01-11 14:23:09 +01:00
2017-11-20 13:22:48 +01:00
2017-04-27 14:13:19 +02:00
2017-04-11 13:23:01 +02:00
2016-12-06 13:34:00 +01:00
2017-11-03 13:24:12 +01:00
2017-07-26 15:35:02 +02:00
2016-06-14 08:25:25 +02:00
2017-11-03 13:24:12 +01:00
2017-11-22 11:27:40 +01:00
2017-07-26 15:33:45 +02:00
2017-04-27 14:13:19 +02:00
2017-11-24 11:47:26 -05:00
2017-11-03 13:24:12 +01:00
2016-09-14 13:18:07 +02:00
2016-08-24 17:43:29 +02:00
2017-10-05 09:09:50 +02:00