On Sat, Sep 17, 2016 at 12:29 PM, Nick Sarnie <commendsar...@gmail.com>

> Hi Alex,
> The output is here: http://pastebin.com/raw/qjnpuaVr

Ok, you need to go complain to your motherboard manufacturer, they're the
ones hiding the ACS capability.  PCIe capabilities always start at 0x100,
the dword there is:

100: 01 00 01 22 = 0x22010001

Breaking that down, the capability at 0x100 is ID 0x0001 (AER), version
0x1, and the next capability is at 0x220.  So we do the same there:

220: 19 00 01 00 = 0x00010019

Capability ID 0x0019 (Secondary PCIe), version 0x1, next capability 0x0,
terminating the capability list.

Per Intel documentation for the chipset (
the ACS capability and control registers live at 0x144 and 0x148
respectively and we can see that you do have data here matching the default
value of the capability register:

140: 00 00 00 00 0f 00 00 00 00 00 00 00 00 00 00 00

ie. default value of 0x144 is 0xf.  It appears that this BIOS vendor didn't
connect the capability into the chain or fill in the capability header.
The registers to do this are RW/O, ie. Read-Write-Once.  IOW, the registers
can only be written once, which is intended to be used by the BIOS.  The
capability bits themselves are RW/O, allowing vendors to expose different
sets of ACS capabilities.  Given that this vendor has not exposed the
capability, we have no basis to believe that the default value of the
register represents the real capabilities of the system and therefore we
cannot assume we're able to control ACS.  File a bug with the vendor or
look for a BIOS update where they may have already fixed this.

> Also, is there any way we could move the USB controller into its own
> group, or remove the Ethernet and SATA controller into a seperate group?
> Ideally, I could pass the USB Controller in group 7 without the ACS patch.

That's not how IOMMU groups works.  See
http://vfio.blogspot.com/2014/08/iommu-groups-inside-and-out.html  We
aren't creating these groups arbitrarily, we base them on the information
provided to use by the IOMMU driver and PCI topology features, including
ACS.  If we cannot determine that there is isolation between components, we
must assume that they are not isolated.  Your choices are to run an
unsupported (and unsupportable) configuration using the ACS override patch,
get your hardware vendor to fix their platform, or upgrade to better
hardware with better isolation characteristics.
vfio-users mailing list

Reply via email to