diff --git a/drivers/nvme/host/pci.c b/drivers/nvme/host/pci.c --- a/drivers/nvme/host/pci.c +++ b/drivers/nvme/host/pci.c @@ -3296,14 +3296,19 @@ static void nvme_dev_unmap(struct nvme_dev *dev) pci_release_mem_regions(to_pci_dev(dev->dev)); } -static bool nvme_pci_ctrl_is_dead(struct nvme_dev *dev) +static bool nvme_pci_ctrl_is_accessible(struct nvme_dev *dev) { struct pci_dev *pdev = to_pci_dev(dev->dev); + + return pci_is_enabled(pdev) && pci_device_is_present(pdev) && + pdev->error_state == pci_channel_io_normal; +} + +static bool nvme_pci_ctrl_is_dead(struct nvme_dev *dev) +{ u32 csts; - if (!pci_is_enabled(pdev) || !pci_device_is_present(pdev)) - return true; - if (pdev->error_state != pci_channel_io_normal) + if (!nvme_pci_ctrl_is_accessible(dev)) return true; csts = readl(dev->bar + NVME_REG_CSTS); @@ -3331,10 +3336,16 @@ static void nvme_dev_disable(struct nvme_dev