nvme-pci: Fix AER reset handling
PATCH 1/1 nvme-pci: Fix AER reset handling
The nvme timeout handling doesn't do anything if the pci channel is offline, which is the case when recovering from PCI error event, so it was a bad idea to sync the controller reset in this state. This patch flushes the reset work in the error_resume callback instead when the channel is back to online. This keeps AER handling serialized and can recover from timeouts.
Fixes cc1d5e749a2e ("nvme/pci: Sync controller reset for AER slot_reset")
Reported-by Alex Gagniuc <mr.nuke.me at gmail.com>
Tested-by Alex Gagniuc <mr.nuke.me at gmail.com>
Signed-off-by Keith Busch <keith.busch at intel.com>
--- drivers/nvme/host/pci.c | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-)
drivers/nvme/host/pci.c +5 -9
@@ -2750,19 +2750,15 @@ static pci_ers_result_t nvme_slot_reset(struct pci_dev *pdev)dev_info (dev->ctrl.device,"restart after slot reset\n" );pci_restore_state (pdev); -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 ; - } +nvme_reset_ctrl (&dev->ctrl); +return PCI_ERS_RESULT_RECOVERED ; }static void nvme_error_resume (struct pci_dev *pdev) { +struct nvme_dev *dev =pci_get_drvdata (pdev); + +flush_work (&dev->ctrl.reset_work);pci_cleanup_aer_uncorrect_error_status (pdev); }
Signature · 1 line
2.14.3
PATCH 1/1 nvme-pci: Fix AER reset handling
Thanks,
applied to nvme-4.18.