ACK: [SRU][O][PATCH 0/1] PCI: Wait for device readiness with Configuration RRS
Kuba Pawlak
kuba.pawlak at canonical.com
Sun Apr 6 09:08:23 UTC 2025
On 4.04.2025 19:14, Tim Whisonant wrote:
> BugLink: https://bugs.launchpad.net/bugs/2106251
>
> SRU Justification:
>
> [Impact]
>
> PCI: Wait for device readiness with Configuration RRS
>
> After a device reset, delays are required before the device can
> successfully complete config accesses. PCIe r6.0, sec 6.6, specifies some
> delays required before software can perform config accesses. Devices that
> require more time after those delays may respond to config accesses with
> Configuration Request Retry Status (RRS) completions.
>
> Callers of pci_dev_wait() are responsible for delays until the device can
> respond to config accesses. pci_dev_wait() waits any additional time until
> the device can successfully complete config accesses.
>
> Reading config space of devices that are not present or not ready typically
> returns ~0 (PCI_ERROR_RESPONSE). Previously we polled the Command register
> until we got a value other than ~0. This is sometimes a problem because
> Root Complex handling of RRS completions may include several retries and
> implementation-specific behavior that is invisible to software (see sec
> 2.3.2), so the exponential backoff in pci_dev_wait() may not work as
> intended.
>
> Linux enables Configuration RRS Software Visibility on all Root Ports that
> support it. If it is enabled, read the Vendor ID instead of the Command
> register. RRS completions cause immediate return of the 0x0001 reserved
> Vendor ID value, so the pci_dev_wait() backoff works correctly.
>
> When a read of Vendor ID eventually completes successfully by returning a
> non-0x0001 value (the Vendor ID or 0xffff for VFs), the device should be
> initialized and ready to respond to config requests.
>
> For conventional PCI devices or devices below Root Ports that don't support
> Configuration RRS Software Visibility, poll the Command register as before.
>
> This was developed independently, but is very similar to Stanislav
> Spassov's previous work at
> https://lore.kernel.org/linux-pci/20200223122057.6504-1-stanspas@amazon.com
>
> [Fix]
>
> Oracular: cherry picked from upstream
> Noble: backported from upstream
> Jammy: not required
> Focal: not required
> Bionic: not required
> Xenial: not required
> Trusty: not required
>
> [Test Plan]
>
> Compile and boot tested.
>
> [Where problems could occur]
>
> The PCI core is affected in the device wait logic. Latency between
> device reset and configuration accesses may be altered.
>
> Bjorn Helgaas (1):
> PCI: Wait for device readiness with Configuration RRS
>
> drivers/pci/pci.c | 41 ++++++++++++++++++++++++++++-------------
> drivers/pci/pci.h | 5 +++++
> drivers/pci/probe.c | 9 +++------
> include/linux/pci.h | 1 +
> 4 files changed, 37 insertions(+), 19 deletions(-)
>
Acked-by: Kuba Pawlak <kuba.pawlak at canonical.com>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: OpenPGP_0x216A9D7E3B63DCB4.asc
Type: application/pgp-keys
Size: 3139 bytes
Desc: OpenPGP public key
URL: <https://lists.ubuntu.com/archives/kernel-team/attachments/20250406/1e3ffcc1/attachment-0001.key>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: OpenPGP_signature.asc
Type: application/pgp-signature
Size: 840 bytes
Desc: OpenPGP digital signature
URL: <https://lists.ubuntu.com/archives/kernel-team/attachments/20250406/1e3ffcc1/attachment-0001.sig>
More information about the kernel-team
mailing list