* [PATCH v2] PCI/DPC: Increase recovery timeout to 60 seconds [not found] <20261106082612.1840817-1-ziyou.dev@foxmail.com> @ 2026-11-06 8:56 ` Ziyou Wang (Lenovo) 2026-11-06 9:05 ` sashiko-bot 2026-11-06 15:21 ` Bjorn Helgaas 0 siblings, 2 replies; 3+ messages in thread From: Ziyou Wang (Lenovo) @ 2026-11-06 8:56 UTC (permalink / raw) To: Bjorn Helgaas Cc: Lukas Wunner, Kuppuswamy Sathyanarayanan, linux-pci, linux-kernel, stable, Ziyou Wang (Lenovo) Some NVMe devices need more than 5 seconds to recover after DPC containment, but pci_dpc_recovered() waits only 4 seconds. If the device hasn't recovered by then, pciehp reports "device recovery failed" and the device is re-enumerated. Move PCIE_RESET_READY_POLL_MS definition from pci.c to pci.h so it can be used in dpc.c. Use PCIE_RESET_READY_POLL_MS (60 seconds) as the timeout so pciehp waits as long as pci_dev_wait() does, which is sufficient for all known devices. Tested with INNOGRIT NVMe SSD [1dbe:5668] with ACS Fatal error injection: Upstream kernel (7.3.0-master+, 4s timeout): [123.018691] nvme: not ready 1023ms after DPC; waiting [124.106690] nvme: not ready 2047ms after DPC; waiting [125.642703] pciehp: Slot(64): Link Down [126.218696] AER: subordinate device reset failed [126.218700] AER: device recovery failed Device re-enumerated as nvme1 With this patch (60s timeout): [74.894811] nvme: not ready 1023ms after DPC; waiting [75.982813] nvme: not ready 2047ms after DPC; waiting [78.094810] nvme: ready 4095ms after DPC [78.094816] nvme: restart after slot reset [78.111620] AER: device recovery successful Device works normally Fixes: a97396c6eb13 ("PCI: pciehp: Ignore Link Down/Up caused by DPC") Cc: stable@vger.kernel.org Signed-off-by: Ziyou Wang (Lenovo) <ziyou.dev@foxmail.com> --- drivers/pci/pci.c | 1 - drivers/pci/pci.h | 10 ++++++++++ drivers/pci/pcie/dpc.c | 11 ++++++----- 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c index 8cc6a89130b5..08f08f25e597 100644 --- a/drivers/pci/pci.c +++ b/drivers/pci/pci.c @@ -80,7 +80,6 @@ struct pci_pme_device { * limit, but 60 sec ought to be enough for any device to become * responsive. */ -#define PCIE_RESET_READY_POLL_MS 60000 /* msec */ static void pci_dev_d3_sleep(struct pci_dev *dev) { diff --git a/drivers/pci/pci.h b/drivers/pci/pci.h index ba3c3fddddc2..1e8ddcc013ff 100644 --- a/drivers/pci/pci.h +++ b/drivers/pci/pci.h @@ -61,6 +61,16 @@ struct pcie_tlp_log; */ #define PCIE_RESET_CONFIG_WAIT_MS 100 +/* + * Time to wait for a device to become ready after a reset. + * + * Devices may extend the 1 sec period through Request Retry Status + * completions (PCIe r6.0 sec 2.3.1). The spec does not provide an upper + * limit, but 60 sec ought to be enough for any device to become + * responsive. + */ +#define PCIE_RESET_READY_POLL_MS 60000 /* msec */ + /* Parameters for the waiting for link up routine */ #define PCIE_LINK_WAIT_MAX_RETRIES 10 #define PCIE_LINK_WAIT_SLEEP_MS 90 diff --git a/drivers/pci/pcie/dpc.c b/drivers/pci/pcie/dpc.c index 2b779bd1d861..df1c469fa24c 100644 --- a/drivers/pci/pcie/dpc.c +++ b/drivers/pci/pcie/dpc.c @@ -116,12 +116,13 @@ bool pci_dpc_recovered(struct pci_dev *pdev) return false; /* - * Need a timeout in case DPC never completes due to failure of - * dpc_wait_rp_inactive(). The spec doesn't mandate a time limit, - * but reports indicate that DPC completes within 4 seconds. + * Wait for DPC recovery completion. Use PCIE_RESET_READY_POLL_MS + * (60s) to match pci_dev_wait() timeout. Some devices need >5 seconds + * to recover after DPC containment. The 4 second timeout is too short. */ - wait_event_timeout(dpc_completed_waitqueue, dpc_completed(pdev), - msecs_to_jiffies(4000)); + wait_event_timeout(dpc_completed_waitqueue, + dpc_completed(pdev), + msecs_to_jiffies(PCIE_RESET_READY_POLL_MS)); return test_and_clear_bit(PCI_DPC_RECOVERED, &pdev->priv_flags); } -- 2.53.0 ^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH v2] PCI/DPC: Increase recovery timeout to 60 seconds 2026-11-06 8:56 ` [PATCH v2] PCI/DPC: Increase recovery timeout to 60 seconds Ziyou Wang (Lenovo) @ 2026-11-06 9:05 ` sashiko-bot 2026-11-06 15:21 ` Bjorn Helgaas 1 sibling, 0 replies; 3+ messages in thread From: sashiko-bot @ 2026-11-06 9:05 UTC (permalink / raw) To: Ziyou Wang (Lenovo); +Cc: linux-pci Thank you for your contribution! Sashiko AI review found 1 potential issue to consider: - [Low] PCI: orphaned PCIE_RESET_READY_POLL_MS comment left in drivers/pci/pci.c -- commit b65aa35af6ea60927f9e516408b33a731c59921c Author: Ziyou Wang (Lenovo) <ziyou.dev@foxmail.com> PCI/DPC: Increase recovery timeout to 60 seconds This commit moves PCIE_RESET_READY_POLL_MS from drivers/pci/pci.c to drivers/pci/pci.h and uses it as the DPC recovery timeout in pci_dpc_recovered(). > diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c > index d6590805faeb2..dae2e74e64777 100644 > --- a/drivers/pci/pci.c > +++ b/drivers/pci/pci.c > @@ -82,7 +82,6 @@ struct pci_pme_device { > * limit, but 60 sec ought to be enough for any device to become > * responsive. > */ > -#define PCIE_RESET_READY_POLL_MS 60000 /* msec */ > > static void pci_dev_d3_sleep(struct pci_dev *dev) > { [Severity: Low] This isn't a bug, but moving PCIE_RESET_READY_POLL_MS to drivers/pci/pci.h leaves its original comment block orphaned above pci_dev_d3_sleep(). Should the comment be removed here as well since it was copied to drivers/pci/pci.h? -- Sashiko AI review · https://sashiko.dev/#/patchset/tencent_BB887B4DB8D2131AF5026893E0FE567D6D05@qq.com?part=1 ^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH v2] PCI/DPC: Increase recovery timeout to 60 seconds 2026-11-06 8:56 ` [PATCH v2] PCI/DPC: Increase recovery timeout to 60 seconds Ziyou Wang (Lenovo) 2026-11-06 9:05 ` sashiko-bot @ 2026-11-06 15:21 ` Bjorn Helgaas 1 sibling, 0 replies; 3+ messages in thread From: Bjorn Helgaas @ 2026-11-06 15:21 UTC (permalink / raw) To: Ziyou Wang (Lenovo) Cc: Bjorn Helgaas, Lukas Wunner, Kuppuswamy Sathyanarayanan, linux-pci, linux-kernel, stable On Fri, Nov 06, 2026 at 04:56:55PM +0800, Ziyou Wang (Lenovo) wrote: > Some NVMe devices need more than 5 seconds to recover after DPC > containment, but pci_dpc_recovered() waits only 4 seconds. If the device > hasn't recovered by then, pciehp reports "device recovery failed" and > the device is re-enumerated. > > Move PCIE_RESET_READY_POLL_MS definition from pci.c to pci.h so it can be > used in dpc.c. Use PCIE_RESET_READY_POLL_MS (60 seconds) as the timeout > so pciehp waits as long as pci_dev_wait() does, which is sufficient for > all known devices. > > Tested with INNOGRIT NVMe SSD [1dbe:5668] with ACS Fatal error > injection: > > Upstream kernel (7.3.0-master+, 4s timeout): > [123.018691] nvme: not ready 1023ms after DPC; waiting > [124.106690] nvme: not ready 2047ms after DPC; waiting Was there a "not ready ... after DPC; giving up" message here? pci_dev_wait() should log *something* about how it resolved this situation. > [125.642703] pciehp: Slot(64): Link Down > [126.218696] AER: subordinate device reset failed > [126.218700] AER: device recovery failed > Device re-enumerated as nvme1 > > With this patch (60s timeout): > [74.894811] nvme: not ready 1023ms after DPC; waiting > [75.982813] nvme: not ready 2047ms after DPC; waiting > [78.094810] nvme: ready 4095ms after DPC > [78.094816] nvme: restart after slot reset > [78.111620] AER: device recovery successful > Device works normally > > Fixes: a97396c6eb13 ("PCI: pciehp: Ignore Link Down/Up caused by DPC") > Cc: stable@vger.kernel.org > Signed-off-by: Ziyou Wang (Lenovo) <ziyou.dev@foxmail.com> > --- 30 minutes after v1 is too soon to post a v2. A couple days is a reasonable interval. v2 should include a note here (after the "---") about what changed since v1 and ideally a lore link to the v1 posting. ^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2026-11-06 15:21 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <20261106082612.1840817-1-ziyou.dev@foxmail.com>
2026-11-06 8:56 ` [PATCH v2] PCI/DPC: Increase recovery timeout to 60 seconds Ziyou Wang (Lenovo)
2026-11-06 9:05 ` sashiko-bot
2026-11-06 15:21 ` Bjorn Helgaas
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox