On Thu, Aug 18, 2022 at 07:53:15PM +0800, Baolu Lu wrote:
On 2022/8/18 05:17, Bjorn Helgaas wrote:PCI: Enable PASID only when ACS RR & UF enabled on upstream path
On Wed, Aug 17, 2022 at 09:20:15AM +0800, Lu Baolu wrote:Thank you for the suggestions. I will rephrase the commit message
Some configurations of the PCI fabric will route device originated TLPThis makes it sound like a few unusual configurations will route TLPs
packets based on the memory addresses.
based on memory addresses, but address routing is the default for all
PCIe Memory Requests, and ACS provides a way to override that default.
These configurations are incompatible with PASID as the PASIDI would say "the Requester ID/PASID combination forms a distinct
packets form a distinct address space.
address space."
For instance, any configuration where switches are presentI think your patch actually requires all those features to be not just
without ACS enabled is incompatible.
This enhances the pci_enable_pasid() interface by requiring the ACS to
support Source Validation, Request Redirection, Completer Redirection,
and Upstream Forwarding. This effectively means that devices cannot
spoof their requester ID, requests and completions cannot be redirected,
and all transactions are forwarded upstream, even as it passes through a
bridge where the target device is downstream.
"supported" but actually*enabled* for the entire path leading to the
device.
To use the terms from the spec:
"P2P Request Redirect"
"P2P Completion Redirect"
"Requester ID, Requests, and Completions"
and maybe something like:
... even if the TLP looks like a P2P Request because its memory
address (ignoring the PASID) would fall in a bridge window and would
normally be routed downstream.
accordingly like this:
PCI: Allow PASID only when ACS enforced on upstreaming path
The Requester ID/Process Address Space ID (PASID) combination
identifies an address space distinct from the PCI bus address space,
e.g., an address space defined by an IOMMU.
But the PCIe fabric routes Memory Requests based on the TLP address,
ignoring any PASID (PCIe r6.0, sec 2.2.10.4), so a TLP with PASID that
*should* go upstream to the IOMMU may instead be routed as a P2P
Request if its address falls in a bridge window.
To ensure that all Memory Requests with PASID are routed upstream,
only enable PASID if ACS P2P Request Redirect and Upstream Forwarding
are enabled for the path leading to the device.