]> Git Repo - linux.git/commitdiff
nvme-pci: fix freeze accounting for error handling
authorKeith Busch <[email protected]>
Tue, 12 Jul 2022 15:16:32 +0000 (08:16 -0700)
committerChristoph Hellwig <[email protected]>
Thu, 14 Jul 2022 14:35:25 +0000 (16:35 +0200)
A reset on a live device experiencing a link error still needs to have
the queue freeze state started for the subsequent reinitialization. Skip
only the register read if the device is not present instead of bypassing
the freeze checks.

Fixes: b98235d3a471e ("nvme-pci: harden drive presence detect in nvme_dev_disable()")
Reported-by: Niklas Schnelle <[email protected]>
Signed-off-by: Keith Busch <[email protected]>
Tested-by: Niklas Schnelle <[email protected]>
Signed-off-by: Christoph Hellwig <[email protected]>
drivers/nvme/host/pci.c

index 193b447556628439bb18e5afcaa44b917780f65e..58c72d55769a1fc52b2033d567ea96a51454b638 100644 (file)
@@ -2690,8 +2690,13 @@ static void nvme_dev_disable(struct nvme_dev *dev, bool shutdown)
        struct pci_dev *pdev = to_pci_dev(dev->dev);
 
        mutex_lock(&dev->shutdown_lock);
-       if (pci_device_is_present(pdev) && pci_is_enabled(pdev)) {
-               u32 csts = readl(dev->bar + NVME_REG_CSTS);
+       if (pci_is_enabled(pdev)) {
+               u32 csts;
+
+               if (pci_device_is_present(pdev))
+                       csts = readl(dev->bar + NVME_REG_CSTS);
+               else
+                       csts = ~0;
 
                if (dev->ctrl.state == NVME_CTRL_LIVE ||
                    dev->ctrl.state == NVME_CTRL_RESETTING) {
This page took 0.070641 seconds and 4 git commands to generate.