Re: [PATCH v7 09/19] PCI/P2PDMA: Reject Translated Requests blocked by Translation Blocking

From: Logan Gunthorpe

Date: Mon Sep 21 2026 - 16:43:05 EST




On 2026-09-20 05:41, Leon Romanovsky wrote:
> From: Leon Romanovsky <leonro@xxxxxxxxxx>
>
> 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 <tdave@xxxxxxxxxx>
> Signed-off-by: Leon Romanovsky <leonro@xxxxxxxxxx>

> +/*
> + * 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 <logang@xxxxxxxxxxxx>