| From foo@baz Sat Jul 28 10:25:26 CEST 2018 |
| From: Keith Busch <keith.busch@intel.com> |
| Date: Thu, 24 May 2018 16:16:04 -0600 |
| Subject: nvme-pci: Fix AER reset handling |
| |
| From: Keith Busch <keith.busch@intel.com> |
| |
| [ Upstream commit 72cd4cc28e234ed7189ee508ed65ab60c80a97c8 ] |
| |
| 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. |
| |
| Link: https://bugzilla.kernel.org/show_bug.cgi?id=199757 |
| Fixes: cc1d5e749a2e ("nvme/pci: Sync controller reset for AER slot_reset") |
| Reported-by: Alex Gagniuc <mr.nuke.me@gmail.com> |
| Tested-by: Alex Gagniuc <mr.nuke.me@gmail.com> |
| Signed-off-by: Keith Busch <keith.busch@intel.com> |
| Signed-off-by: Christoph Hellwig <hch@lst.de> |
| Signed-off-by: Sasha Levin <alexander.levin@microsoft.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/nvme/host/pci.c | 3 +++ |
| 1 file changed, 3 insertions(+) |
| |
| --- a/drivers/nvme/host/pci.c |
| +++ b/drivers/nvme/host/pci.c |
| @@ -2519,6 +2519,9 @@ static pci_ers_result_t nvme_slot_reset( |
| |
| 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); |
| } |
| |