[libvirt] Questions about function virPCIDeviceIsBehindSwitchLackingACS in virpci.c

Wuzongyong (Euler Dept) cordius.wu at huawei.com
Mon Sep 18 12:07:01 UTC 2017


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?

Thanks,
Zongyong Wu

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20170918/1ad0e5df/attachment-0001.htm>


More information about the libvir-list mailing list