I dont think so. I’m not an expert on the subject as I have not set up passthrough myself but from what I understand of the theory, you can either pass the card or not. You cant just pass 2 ports on the card. Its an all or nothing thing.
I should have recalled that PCI passthrough is at PCI ‘function’ level
Unless the card portrays itself as 4 virtual PCI USB cards(or functions) to the OS, we might not be getting what we thought of.
I have had experience with passing controllers through to different VMs. If it has 4 different controllers that show up as different /dev/sys/usb devices, then you can pass that through. That is a big if though as you will probably have to buy it to find out. It would not be IOMMU but the overhead would not matter much as USB is mostly a CPU bound protocol anyway.
I was looking to use a similar card that had 4 Renesas controllers on it but post on a forum somewhere said it didn’t work. Apparently the 4 controllers could be passed through to separate VM’s without problems and they would show up in the guests. The problem was that no USB devices would be detected. I think in theory it could work but it comes down to implementation. The card was very expensive too so I wasn’t will to gamble that I could get it to work. I really wish it would work because after stuffing 3x dual slot GPU’s in there isn’t much room for USB cards.
I would like to take a moment to understand what the ACS patch really does & how does it magically enable favorable IOMMU grouping ?
From what I can understand… ACS stands for Access Control Services & Then, PCIe cards seems to work like Computers in a network & communicate in packets with source & destination addresses. Then they say that it is possible for 2 PCIe devices to get cozy with each other & communicate in a P2P fashion. (Check this ppt, slide 33) I assume that it may be via the dumb PCIe switch.
Then they say using ACS, they can make the P2P communication go via the Root Complex, inside which, where they can possibly intercept the packets …sort of like a router doing inter-vlan routing.
Now that they can route PCI communications through the Root Complex circuitry(using ACS), they can do some thing called ATS or Address Translation Service.
In slide 35, they say "ATS provides a mechanism allowing a virtual machine to perform DMA transaction directly to and from a PCIe endpoint."
So it looks like the ACS patch helps in enabling ATS for devices of interest, so that VMs can do DMA to the PCIe endpoint !!???
I wrote something on ACS, IOMMU and IOVA here, if you’d like to read the “conceptual discussion” segment of the OP, it will likely answer your question.
As far as your “From what I understand”, you’re pretty much spot on with the exception of the mention of a dumb switch. Certain smart switches can use ARP to detect where a device is and not make the packets go all the way back to the router (root port). Apply this thinking to the PCIe fabric.
My understanding is the patch will fake ACS capability for devices that don’t support it. This allows each device to have it’s own group when they wouldn’t normally. However it is still possible for these devices to perform DMA transactions directly with each other. This is what makes the patch dangerous and why it will never make it to the mainline kernel. Of course it is not common for devices to perform these transactions or even support them, but it is possible.