提交 5314cd50 编写于 作者: J Jisheng Zhang 提交者: Xie XiuQi

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

[ Upstream commit 9e2b5de5604a6ff2626c51e77014d92c9299722c ]

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: NJisheng Zhang <Jisheng.Zhang@synaptics.com>
Signed-off-by: NLorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Signed-off-by: NBjorn Helgaas <bhelgaas@google.com>
Acked-by: NGustavo Pimentel <gustavo.pimentel@synopsys.com>
Signed-off-by: NSasha Levin <sashal@kernel.org>
Signed-off-by: NYang Yingliang <yangyingliang@huawei.com>
上级 a9965bf3
...@@ -443,7 +443,7 @@ int dw_pcie_host_init(struct pcie_port *pp) ...@@ -443,7 +443,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
...@@ -481,7 +481,7 @@ int dw_pcie_host_init(struct pcie_port *pp) ...@@ -481,7 +481,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;
...@@ -495,7 +495,7 @@ int dw_pcie_host_init(struct pcie_port *pp) ...@@ -495,7 +495,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;
...@@ -511,6 +511,9 @@ int dw_pcie_host_init(struct pcie_port *pp) ...@@ -511,6 +511,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% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册