HI, On 12/31/22 10:33 AM, Lukas Wunner wrote: > We're calling pci_bridge_wait_for_secondary_bus() after performing a > Secondary Bus Reset, but neglect to do the same after coming out of a > DPC-induced Hot Reset. As a result, we're not observing the delays > prescribed by PCIe r6.0 sec 6.6.1 and may access devices on the > secondary bus before they're ready. Fix it. Please remove "we" usage. Otherwise, looks good. > > Tested-by: Ravi Kishore Koppuravuri <ravi.kishore.koppuravuri@xxxxxxxxx> > Signed-off-by: Lukas Wunner <lukas@xxxxxxxxx> > Cc: stable@xxxxxxxxxxxxxxx > --- > drivers/pci/pci.c | 3 --- > drivers/pci/pci.h | 3 +++ > drivers/pci/pcie/dpc.c | 4 ++-- > 3 files changed, 5 insertions(+), 5 deletions(-) > > diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c > index b0b49243a908..19fe0ef0e583 100644 > --- a/drivers/pci/pci.c > +++ b/drivers/pci/pci.c > @@ -167,9 +167,6 @@ static int __init pcie_port_pm_setup(char *str) > } > __setup("pcie_port_pm=", pcie_port_pm_setup); > > -/* Time to wait after a reset for device to become responsive */ > -#define PCIE_RESET_READY_POLL_MS 60000 > - > /** > * pci_bus_max_busnr - returns maximum PCI bus number of given bus' children > * @bus: pointer to PCI bus structure to search > diff --git a/drivers/pci/pci.h b/drivers/pci/pci.h > index 40758248dd80..b72fd888379b 100644 > --- a/drivers/pci/pci.h > +++ b/drivers/pci/pci.h > @@ -7,6 +7,9 @@ > /* Number of possible devfns: 0.0 to 1f.7 inclusive */ > #define MAX_NR_DEVFNS 256 > > +/* Time to wait after a reset for device to become responsive */ > +#define PCIE_RESET_READY_POLL_MS 60000 > + > #define PCI_FIND_CAP_TTL 48 > > #define PCI_VSEC_ID_INTEL_TBT 0x1234 /* Thunderbolt */ > diff --git a/drivers/pci/pcie/dpc.c b/drivers/pci/pcie/dpc.c > index f5ffea17c7f8..a5d7c69b764e 100644 > --- a/drivers/pci/pcie/dpc.c > +++ b/drivers/pci/pcie/dpc.c > @@ -170,8 +170,8 @@ pci_ers_result_t dpc_reset_link(struct pci_dev *pdev) > pci_write_config_word(pdev, cap + PCI_EXP_DPC_STATUS, > PCI_EXP_DPC_STATUS_TRIGGER); > > - if (!pcie_wait_for_link(pdev, true)) { > - pci_info(pdev, "Data Link Layer Link Active not set in 1000 msec\n"); > + if (pci_bridge_wait_for_secondary_bus(pdev, "DPC", > + PCIE_RESET_READY_POLL_MS)) { > clear_bit(PCI_DPC_RECOVERED, &pdev->priv_flags); > ret = PCI_ERS_RESULT_DISCONNECT; > } else { -- Sathyanarayanan Kuppuswamy Linux Kernel Developer