On 2026-09-20 05:41, Leon Romanovsky wrote:
> From: Leon Romanovsky <[email protected]>
> 
> A Downstream Port with ACS Translation Blocking enabled treats every
> Upstream Memory Request whose Address Type is not Untranslated as an ACS
> Violation, ahead of "any applicable ACS P2P control mechanisms" per PCIe
> r7.0 sec 6.12.1.1. P2PDMA never looks at that bit, so it reports a
> bus-addressable path where an ATS client's Requests would be rejected.
> 
> Add PCI_ACS_P2PDMA_BLOCKED, and because blocking is not a routing control,
> scan the path for it rather than the divergence port alone. A blocked
> Request has no host bridge fallback, since the Address Type is rejected
> wherever the Request is addressed.
> 
> The two routes do not pass the same ports, so scan them separately. A
> direct route turns around at the divergence and only passes the ports
> below it, while the host bridge route keeps climbing and passes that port
> and everything above it as well.
> 
> Tested-by: Tushar Dave <[email protected]>
> Signed-off-by: Leon Romanovsky <[email protected]>

> +/*
> + * Report whether any port between @client and @common rejects Translated
> + * addresses. @common is NULL to walk every port up to the host bridge. A 
> port
> + * whose ACS Control cannot be read counts as blocking, which withdraws only
> + * the Translated classes because an Untranslated Request is routed by the
> + * redirect controls instead.
> + */

Some awkward wording, maybe:

"If @common is NULL, every port up to the host bridge is walked."

Besides that minor nit:

Reviewed-by: Logan Gunthorpe <[email protected]>

Reply via email to