Commit 2507c7c9 authored by Jisheng Zhang's avatar Jisheng Zhang Committed by Greg Kroah-Hartman

PCI: dwc: Free MSI in dw_pcie_host_init() error path

[ Upstream commit 9e2b5de5 ]

If we ever did MSI-related initializations, we need to call
dw_pcie_free_msi() in the error code path.

Remove the IS_ENABLED(CONFIG_PCI_MSI) check for MSI init because
pci_msi_enabled() already has a stub for !CONFIG_PCI_MSI.
Signed-off-by: default avatarJisheng Zhang <Jisheng.Zhang@synaptics.com>
Signed-off-by: default avatarLorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Signed-off-by: default avatarBjorn Helgaas <bhelgaas@google.com>
Acked-by: default avatarGustavo Pimentel <gustavo.pimentel@synopsys.com>
Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
parent 84e5ca83
...@@ -439,7 +439,7 @@ int dw_pcie_host_init(struct pcie_port *pp) ...@@ -439,7 +439,7 @@ int dw_pcie_host_init(struct pcie_port *pp)
if (ret) if (ret)
pci->num_viewport = 2; pci->num_viewport = 2;
if (IS_ENABLED(CONFIG_PCI_MSI) && pci_msi_enabled()) { if (pci_msi_enabled()) {
/* /*
* If a specific SoC driver needs to change the * If a specific SoC driver needs to change the
* default number of vectors, it needs to implement * default number of vectors, it needs to implement
...@@ -477,7 +477,7 @@ int dw_pcie_host_init(struct pcie_port *pp) ...@@ -477,7 +477,7 @@ int dw_pcie_host_init(struct pcie_port *pp)
if (pp->ops->host_init) { if (pp->ops->host_init) {
ret = pp->ops->host_init(pp); ret = pp->ops->host_init(pp);
if (ret) if (ret)
goto error; goto err_free_msi;
} }
pp->root_bus_nr = pp->busn->start; pp->root_bus_nr = pp->busn->start;
...@@ -491,7 +491,7 @@ int dw_pcie_host_init(struct pcie_port *pp) ...@@ -491,7 +491,7 @@ int dw_pcie_host_init(struct pcie_port *pp)
ret = pci_scan_root_bus_bridge(bridge); ret = pci_scan_root_bus_bridge(bridge);
if (ret) if (ret)
goto error; goto err_free_msi;
bus = bridge->bus; bus = bridge->bus;
...@@ -507,6 +507,9 @@ int dw_pcie_host_init(struct pcie_port *pp) ...@@ -507,6 +507,9 @@ int dw_pcie_host_init(struct pcie_port *pp)
pci_bus_add_devices(bus); pci_bus_add_devices(bus);
return 0; return 0;
err_free_msi:
if (pci_msi_enabled() && !pp->ops->msi_host_init)
dw_pcie_free_msi(pp);
error: error:
pci_free_host_bridge(bridge); pci_free_host_bridge(bridge);
return ret; return ret;
......
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