lkml.org 
[lkml]   [2020]   [Jun]   [17]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL 5.7 324/388] pinctrl: sirf: add missing put_device() call in sirfsoc_gpio_probe()
    Date
    From: yu kuai <yukuai3@huawei.com>

    [ Upstream commit 66339f2fba3fa05b0507e1887e4c6abcfc6228a3 ]

    A coccicheck run provided information like the following:

    drivers/pinctrl/sirf/pinctrl-sirf.c:798:2-8: ERROR: missing put_device;
    call of_find_device_by_node on line 792, but without a corresponding
    object release within this function.

    Generated by: scripts/coccinelle/free/put_device.cocci

    Thus add a jump target to fix the exception handling for this
    function implementation.

    Fixes: 5130216265f6 ("PINCTRL: SiRF: add GPIO and GPIO irq support in CSR SiRFprimaII")
    Signed-off-by: yu kuai <yukuai3@huawei.com>
    Link: https://lore.kernel.org/r/20200603013532.755220-1-yukuai3@huawei.com
    Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/pinctrl/sirf/pinctrl-sirf.c | 20 ++++++++++++++------
    1 file changed, 14 insertions(+), 6 deletions(-)

    diff --git a/drivers/pinctrl/sirf/pinctrl-sirf.c b/drivers/pinctrl/sirf/pinctrl-sirf.c
    index 1ebcb957c654..63a287d5795f 100644
    --- a/drivers/pinctrl/sirf/pinctrl-sirf.c
    +++ b/drivers/pinctrl/sirf/pinctrl-sirf.c
    @@ -794,13 +794,17 @@ static int sirfsoc_gpio_probe(struct device_node *np)
    return -ENODEV;

    sgpio = devm_kzalloc(&pdev->dev, sizeof(*sgpio), GFP_KERNEL);
    - if (!sgpio)
    - return -ENOMEM;
    + if (!sgpio) {
    + err = -ENOMEM;
    + goto out_put_device;
    + }
    spin_lock_init(&sgpio->lock);

    regs = of_iomap(np, 0);
    - if (!regs)
    - return -ENOMEM;
    + if (!regs) {
    + err = -ENOMEM;
    + goto out_put_device;
    + }

    sgpio->chip.gc.request = sirfsoc_gpio_request;
    sgpio->chip.gc.free = sirfsoc_gpio_free;
    @@ -824,8 +828,10 @@ static int sirfsoc_gpio_probe(struct device_node *np)
    girq->parents = devm_kcalloc(&pdev->dev, SIRFSOC_GPIO_NO_OF_BANKS,
    sizeof(*girq->parents),
    GFP_KERNEL);
    - if (!girq->parents)
    - return -ENOMEM;
    + if (!girq->parents) {
    + err = -ENOMEM;
    + goto out_put_device;
    + }
    for (i = 0; i < SIRFSOC_GPIO_NO_OF_BANKS; i++) {
    bank = &sgpio->sgpio_bank[i];
    spin_lock_init(&bank->lock);
    @@ -868,6 +874,8 @@ static int sirfsoc_gpio_probe(struct device_node *np)
    gpiochip_remove(&sgpio->chip.gc);
    out:
    iounmap(regs);
    +out_put_device:
    + put_device(&pdev->dev);
    return err;
    }

    --
    2.25.1
    \
     
     \ /
      Last update: 2020-06-18 04:27    [W:4.082 / U:0.268 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site