mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-01-09 01:18:00 +03:00
pciSharesBusWithActive fails to find multiple devices on bus
The first conditional is always true which means the iterator will never find another device on the same bus. if (dev->domain != check->domain || dev->bus != check->bus || ----> (check->slot == check->slot && check->function == check->function)) <----- The goal of that check is to verify that the device is either: in a different pci domain on a different bus is the same identical device This means libvirt may issue a secondary bus reset when there are devices on that bus that actively in use by the host or another guest. * src/util/pci.c: fix a bogus test in pciSharesBusWithActive()
This commit is contained in:
parent
8d4f024221
commit
f4828ca353
@ -446,10 +446,11 @@ pciSharesBusWithActive(pciDevice *dev, pciDevice *check, void *data)
|
|||||||
{
|
{
|
||||||
pciDeviceList *activeDevs = data;
|
pciDeviceList *activeDevs = data;
|
||||||
|
|
||||||
|
/* Different domain, different bus, or simply identical device */
|
||||||
if (dev->domain != check->domain ||
|
if (dev->domain != check->domain ||
|
||||||
dev->bus != check->bus ||
|
dev->bus != check->bus ||
|
||||||
(check->slot == check->slot &&
|
(dev->slot == check->slot &&
|
||||||
check->function == check->function))
|
dev->function == check->function))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (activeDevs && !pciDeviceListFind(activeDevs, check))
|
if (activeDevs && !pciDeviceListFind(activeDevs, check))
|
||||||
|
Loading…
Reference in New Issue
Block a user