Commit a36b0787 authored by Shannon Nelson's avatar Shannon Nelson Committed by Paolo Abeni

ionic: check before releasing pci regions

AER recovery handler can trigger a PCI Reset after tearing
down the device setup in the error detection handler.  The PCI
Reset handler will also attempt to tear down the device setup,
and this second tear down needs to know that it doesn't need
to call pci_release_regions() a second time.  We can clear
num_bars on tear down and use that to decide later if we need
to clear the resources.  This prevents a harmless but disturbing
warning message
    resource: Trying to free nonexistent resource <0xXXXXXXXXXX-0xXXXXXXXXXX>

Fixes: c3a910e1 ("ionic: fill out pci error handlers")
Reviewed-by: default avatarBrett Creeley <brett.creeley@amd.com>
Signed-off-by: default avatarShannon Nelson <shannon.nelson@amd.com>
Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
parent 3980cf16
...@@ -93,6 +93,7 @@ static void ionic_unmap_bars(struct ionic *ionic) ...@@ -93,6 +93,7 @@ static void ionic_unmap_bars(struct ionic *ionic)
bars[i].len = 0; bars[i].len = 0;
} }
} }
ionic->num_bars = 0;
} }
void __iomem *ionic_bus_map_dbpage(struct ionic *ionic, int page_num) void __iomem *ionic_bus_map_dbpage(struct ionic *ionic, int page_num)
...@@ -215,13 +216,15 @@ static int ionic_sriov_configure(struct pci_dev *pdev, int num_vfs) ...@@ -215,13 +216,15 @@ static int ionic_sriov_configure(struct pci_dev *pdev, int num_vfs)
static void ionic_clear_pci(struct ionic *ionic) static void ionic_clear_pci(struct ionic *ionic)
{ {
ionic->idev.dev_info_regs = NULL; if (ionic->num_bars) {
ionic->idev.dev_cmd_regs = NULL; ionic->idev.dev_info_regs = NULL;
ionic->idev.intr_status = NULL; ionic->idev.dev_cmd_regs = NULL;
ionic->idev.intr_ctrl = NULL; ionic->idev.intr_status = NULL;
ionic->idev.intr_ctrl = NULL;
ionic_unmap_bars(ionic);
pci_release_regions(ionic->pdev); ionic_unmap_bars(ionic);
pci_release_regions(ionic->pdev);
}
if (pci_is_enabled(ionic->pdev)) if (pci_is_enabled(ionic->pdev))
pci_disable_device(ionic->pdev); pci_disable_device(ionic->pdev);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment