On 09/19/2017 03:24 AM, Wuzongyong (Euler Dept) wrote: > Hi, > > In function virPCIDeviceIsBehindSwitchLackingACS, I noticed that(line 8): > > 1 if (virPCIDeviceGetParent(dev, &parent) < 0) > 2 return -1; > 3 if (!parent) { > 4 /* if we have no parent, and this is the root bus, ACS doesn't come > 5 * into play since devices on the root bus can't P2P without going > 6 * through the root IOMMU. > 7 */ > 8 if (dev->address.bus == 0) { > 9 return 0; > 10 } else { > 11 virReportError(VIR_ERR_INTERNAL_ERROR, > 12 _("Failed to find parent device for %s"), > 13 dev->name); > 14 return -1; > 15 } > 16 } > > Why we just return 0 only if device's bus is 0? > In my server, I can see a root bus which bus number is greater than 0, see the > results(just a part) after I run lspci -t: > > +-[0000:80]-+-02.0-[81-83]--+-00.0 > | | \-00.1 > | +-05.0 > | +-05.1 > | +-05.2 > | \-05.4 > +-[0000:7f]-+-08.0 > | +-08.2 > | +-08.3 > | + . . . > | \-1f.2 > \-[0000:00]-+-00.0 > +-01.0-[01]----00.0 > +-02.0-[02]--+-00.0 > | +-00.1 > | +-00.2 > | \-00.3 > +-02.2-[03]-- > +-03.0-[04-0b]----00.0-[05-0b]--+-08.0-[06-08]----00.0 > | \-10.0-[09-0b]----00.0 > +-05.0 > +-05.1 > +-05.2 > +-05.4 > +-11.0 > +-11.4 > +-16.0 > +-16.1 > +-1a.0 > > If I assign the device 0000:81:00.0 to a VM, I get "Failed to find parent device". > I think I should get no error with return value 0 just like bus number is 0, because > bus 80 is the root bus as well in my case. > > In the <<Intel C610 Series Chipset and Intel X99 Chipset Platform Controller Hub(PCH)>> > Datasheet, I found that(Chapter 9.1): > For some server platforms, it may be desirable to have multiple PCHs in the system > Which means some PCH's may reside on a bus greater than 0. > > So, is this a bug? Yes. I mean, sort of. Obviously we haven't encountered platform with multiple PCHs yet. Michal -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list