OSDN Git Service

PCI: qcom: Fix an error handling path in 'qcom_pcie_probe()'
authorChristophe JAILLET <christophe.jaillet@wanadoo.fr>
Sat, 6 Nov 2021 17:44:52 +0000 (18:44 +0100)
committerLorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Mon, 29 Nov 2021 13:24:24 +0000 (13:24 +0000)
If 'of_device_get_match_data()' fails, previous 'pm_runtime_get_sync()/
pm_runtime_enable()' should be undone.

To fix it, the easiest is to move this block of code before the memory
allocations and the pm_runtime_xxx calls.

Link: https://lore.kernel.org/r/4d03c636193f64907c8dacb17fa71ed05fd5f60c.1636220582.git.christophe.jaillet@wanadoo.fr
Fixes: b89ff410253d ("PCI: qcom: Replace ops with struct pcie_cfg in pcie match data")
Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Reviewed-by: Stephen Boyd <swboyd@chromium.org>
drivers/pci/controller/dwc/pcie-qcom.c

index 1c3d111..baae67f 100644 (file)
@@ -1534,6 +1534,12 @@ static int qcom_pcie_probe(struct platform_device *pdev)
        const struct qcom_pcie_cfg *pcie_cfg;
        int ret;
 
+       pcie_cfg = of_device_get_match_data(dev);
+       if (!pcie_cfg || !pcie_cfg->ops) {
+               dev_err(dev, "Invalid platform data\n");
+               return -EINVAL;
+       }
+
        pcie = devm_kzalloc(dev, sizeof(*pcie), GFP_KERNEL);
        if (!pcie)
                return -ENOMEM;
@@ -1553,12 +1559,6 @@ static int qcom_pcie_probe(struct platform_device *pdev)
 
        pcie->pci = pci;
 
-       pcie_cfg = of_device_get_match_data(dev);
-       if (!pcie_cfg || !pcie_cfg->ops) {
-               dev_err(dev, "Invalid platform data\n");
-               return -EINVAL;
-       }
-
        pcie->ops = pcie_cfg->ops;
        pcie->pipe_clk_need_muxing = pcie_cfg->pipe_clk_need_muxing;