]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/commitdiff
staging: spmi: hisi-spmi-controller: Fix some error handling paths
authorChristophe JAILLET <christophe.jaillet@wanadoo.fr>
Sun, 13 Dec 2020 15:11:05 +0000 (16:11 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 28 Dec 2020 14:14:53 +0000 (15:14 +0100)
IN the probe function, if an error occurs after calling
'spmi_controller_alloc()', it must be undone by a corresponding
'spmi_controller_put() call.

In the remove function, use 'spmi_controller_put(ctrl)' instead of
'kfree(ctrl)'.

While a it fix an error message
(s/spmi_add_controller/spmi_controller_add/)

Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Link: https://lore.kernel.org/r/20201213151105.137731-1-christophe.jaillet@wanadoo.fr
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/hikey9xx/hisi-spmi-controller.c

index 861aedd5de4847c7208398b684bd343b651beeb4..0d42bc65f39bc33825118f00a8ee7ef5fd529cff 100644 (file)
@@ -278,21 +278,24 @@ static int spmi_controller_probe(struct platform_device *pdev)
        iores = platform_get_resource(pdev, IORESOURCE_MEM, 0);
        if (!iores) {
                dev_err(&pdev->dev, "can not get resource!\n");
-               return -EINVAL;
+               ret = -EINVAL;
+               goto err_put_controller;
        }
 
        spmi_controller->base = devm_ioremap(&pdev->dev, iores->start,
                                             resource_size(iores));
        if (!spmi_controller->base) {
                dev_err(&pdev->dev, "can not remap base addr!\n");
-               return -EADDRNOTAVAIL;
+               ret = -EADDRNOTAVAIL;
+               goto err_put_controller;
        }
 
        ret = of_property_read_u32(pdev->dev.of_node, "spmi-channel",
                                   &spmi_controller->channel);
        if (ret) {
                dev_err(&pdev->dev, "can not get channel\n");
-               return -ENODEV;
+               ret = -ENODEV;
+               goto err_put_controller;
        }
 
        platform_set_drvdata(pdev, spmi_controller);
@@ -309,9 +312,15 @@ static int spmi_controller_probe(struct platform_device *pdev)
        ctrl->write_cmd = spmi_write_cmd;
 
        ret = spmi_controller_add(ctrl);
-       if (ret)
-               dev_err(&pdev->dev, "spmi_add_controller failed with error %d!\n", ret);
+       if (ret) {
+               dev_err(&pdev->dev, "spmi_controller_add failed with error %d!\n", ret);
+               goto err_put_controller;
+       }
+
+       return 0;
 
+err_put_controller:
+       spmi_controller_put(ctrl);
        return ret;
 }
 
@@ -320,7 +329,7 @@ static int spmi_del_controller(struct platform_device *pdev)
        struct spmi_controller *ctrl = platform_get_drvdata(pdev);
 
        spmi_controller_remove(ctrl);
-       kfree(ctrl);
+       spmi_controller_put(ctrl);
        return 0;
 }