+++ /dev/null
-From cc1d5e749a2e1cf59fa940b976181e631d6985e1 Mon Sep 17 00:00:00 2001
-From: Keith Busch <keith.busch@intel.com>
-Date: Thu, 10 May 2018 08:34:20 -0600
-Subject: nvme/pci: Sync controller reset for AER slot_reset
-
-From: Keith Busch <keith.busch@intel.com>
-
-commit cc1d5e749a2e1cf59fa940b976181e631d6985e1 upstream.
-
-AER handling expects a successful return from slot_reset means the
-driver made the device functional again. The nvme driver had been using
-an asynchronous reset to recover the device, so the device
-may still be initializing after control is returned to the
-AER handler. This creates problems for subsequent event handling,
-causing the initializion to fail.
-
-This patch fixes that by syncing the controller reset before returning
-to the AER driver, and reporting the true state of the reset.
-
-Link: https://bugzilla.kernel.org/show_bug.cgi?id=199657
-Reported-by: Alex Gagniuc <mr.nuke.me@gmail.com>
-Cc: Sinan Kaya <okaya@codeaurora.org>
-Cc: Bjorn Helgaas <bhelgaas@google.com>
-Cc: stable@vger.kernel.org
-Tested-by: Alex Gagniuc <mr.nuke.me@gmail.com>
-Reviewed-by: Christoph Hellwig <hch@lst.de>
-Reviewed-by: Martin K. Petersen <martin.petersen@oracle.com>
-Signed-off-by: Keith Busch <keith.busch@intel.com>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
----
- drivers/nvme/host/pci.c | 11 +++++++++--
- 1 file changed, 9 insertions(+), 2 deletions(-)
-
---- a/drivers/nvme/host/pci.c
-+++ b/drivers/nvme/host/pci.c
-@@ -2508,8 +2508,15 @@ static pci_ers_result_t nvme_slot_reset(
-
- dev_info(dev->ctrl.device, "restart after slot reset\n");
- pci_restore_state(pdev);
-- nvme_reset_ctrl(&dev->ctrl);
-- return PCI_ERS_RESULT_RECOVERED;
-+ nvme_reset_ctrl_sync(&dev->ctrl);
-+
-+ switch (dev->ctrl.state) {
-+ case NVME_CTRL_LIVE:
-+ case NVME_CTRL_ADMIN_ONLY:
-+ return PCI_ERS_RESULT_RECOVERED;
-+ default:
-+ return PCI_ERS_RESULT_DISCONNECT;
-+ }
- }
-
- static void nvme_error_resume(struct pci_dev *pdev)