[PATCH v3 01/11] PCI/P2PDMA: Support peer-to-peer memory
Logan Gunthorpe
logang at deltatee.com
Tue Mar 13 11:44:34 PDT 2018
On 13/03/18 11:49 AM, Sinan Kaya wrote:
>> And there's also the ACS problem which means if you want to use P2P on the root ports you'll have to disable ACS on the entire system. (Or preferably, the IOMMU groups need to get more sophisticated to allow for dynamic changes).
>>
>
> Do you think you can keep a pointer to the parent bridge instead of querying it
> via get_upstream_bridge_port() here so that we can reuse your
> pci_p2pdma_disable_acs() in the future.
Keep a pointer where? pci_p2pdma_disable_acs() and
pci_p2pdma_add_client() are used in completely different cases on
completely different devices. There really is no overlap and no obvious
place to store the port pointer (except in the struct pci_dev itself, in
which case why not just call the function again).
> +int pci_p2pdma_disable_acs(struct pci_dev *pdev)
> +{
> + struct pci_dev *up;
> + int pos;
> + u16 ctrl;
> +
> + up = get_upstream_bridge_port(pdev);
> + if (!up)
> + return 0;
>
> Some future device would only deal with pci_p2pdma_add_client(() for whitelisting
> instead of changing all of your code.
That's a problem for whoever writes the future code.
> We should at least limit the usage of get_upstream_bridge_port() family of functions
> to probe time only.
Why?
> We can tell iommu to do one to one translation by passing iommu.passthrough=1 to kernel
> command line to have identical behavior to your switch case.
Well, someone will need to write code for all available IOMMUs to
support this. That's a very big project.
Logan
More information about the Linux-nvme
mailing list