From: Leon Romanovsky leonro@nvidia.com
P2PDMA documentation describes ACS controls as path-wide, although Request and Completion controls apply to different transaction directions and only affect peer-versus-upstream decisions at the path divergence.
Document the client as the Requester and the provider as the Completer, the divergence port checked for each TLP direction, and the conservative handling of unreadable ACS state. Clarify which controls disable_acs_redir changes.
Reviewed-by: Logan Gunthorpe logang@deltatee.com Tested-by: Tushar Dave tdave@nvidia.com Signed-off-by: Leon Romanovsky leonro@nvidia.com --- Documentation/admin-guide/kernel-parameters.txt | 11 ++++++----- Documentation/driver-api/pci/p2pdma.rst | 18 ++++++++++++++++++ 2 files changed, 24 insertions(+), 5 deletions(-)
diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt index 68647ff4bdd2..8507ac79a919 100644 --- a/Documentation/admin-guide/kernel-parameters.txt +++ b/Documentation/admin-guide/kernel-parameters.txt @@ -5292,11 +5292,12 @@ Kernel parameters Specify one or more PCI devices (in the format specified above) separated by semicolons. Each device specified will have the PCI ACS - redirect capabilities forced off which will - allow P2P traffic between devices through - bridges without forcing it upstream. Note: - this removes isolation between devices and - may put more devices in an IOMMU group. + P2P Request Redirect, Completion Redirect, and + Egress Control features forced off. This may + allow P2P traffic through bridges that would + otherwise be redirected upstream. Note: this + removes isolation between devices and may + cause affected devices to share an IOMMU group. config_acs= Format: <ACS flags>@<pci_dev>[; ...] diff --git a/Documentation/driver-api/pci/p2pdma.rst b/Documentation/driver-api/pci/p2pdma.rst index 80f8fec9b0e9..40f5268ba9db 100644 --- a/Documentation/driver-api/pci/p2pdma.rst +++ b/Documentation/driver-api/pci/p2pdma.rst @@ -15,6 +15,24 @@ then based on the ACS settings the transaction can route entirely within the PCIe hierarchy and never reach the root port. The kernel will evaluate the PCIe topology and always permit P2P in these well-defined cases.
+The client is the PCIe Requester and the provider is the Completer, whether +the client reads or writes provider memory. If both are below the same Root +Port, their paths toward it first meet in a Switch, where the paths diverge. +A Request enters that Switch through the Downstream Port above the +Requester, the Requester-side port. If ACS P2P Request Redirect is enabled +there, the Request is routed upstream; otherwise it is routed back +downstream through the Downstream Port leading to the Completer, the +Completer-side port. The path of Completions from a read likewise depends on +ACS P2P Completion Redirect in the Completer-side port. An enabled Egress +Control is conservatively treated as a Request redirect. + +Below the divergence, the route toward the other branch is already upstream, +so those P2P redirect controls do not affect it. Redirect controls for the +reverse transaction directions do not affect the mapping. P2P DMA is routed +through the host bridge when either applicable port redirects. If an ACS +Control register cannot be read, P2P DMA is rejected because the kernel cannot +establish a usable route. + This evaluation assumes clients issue strictly ordered Requests carrying an Untranslated address. Its result is not defined when clients use Relaxed Ordering or issue ATS-translated Requests because those TLP attributes can