]> git.baikalelectronics.ru Git - kernel.git/commit
PCI: Wait up to 60 seconds for device to become ready after FLR
authorSinan Kaya <okaya@codeaurora.org>
Tue, 29 Aug 2017 19:45:45 +0000 (14:45 -0500)
committerBjorn Helgaas <bhelgaas@google.com>
Tue, 29 Aug 2017 19:45:45 +0000 (14:45 -0500)
commited04eeb36f99671459ee39c21a028a7b08fcb894
tree3167e7db230d1c15caf5697662d40c8875198896
parent3bb9e2b09c74a880e65cf93fe3da41b1a46513e8
PCI: Wait up to 60 seconds for device to become ready after FLR

Sporadic reset issues have been observed with an Intel 750 NVMe drive while
assigning the physical function to the guest machine.  The sequence of
events observed is as follows:

  - perform a Function Level Reset (FLR)
  - sleep up to 1000ms total
  - read ~0 from PCI_COMMAND (CRS completion for config read)
  - warn that the device didn't return from FLR
  - touch the device before it's ready
  - device drops config writes when we restore register settings (there's
    no mechanism for software to learn about CRS completions for writes)
  - incomplete register restore leaves device in inconsistent state
  - device probe fails because device is in inconsistent state

After reset, an endpoint may respond to config requests with Configuration
Request Retry Status (CRS) to indicate that it is not ready to accept new
requests. See PCIe r3.1, sec 2.3.1 and 6.6.2.

Increase the timeout value from 1 second to 60 seconds to cover the period
where device responds with CRS and also report polling progress.

Signed-off-by: Sinan Kaya <okaya@codeaurora.org>
[bhelgaas: include the mandatory 100ms in the delays we print]
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
drivers/pci/pci.c