lkml.org 
[lkml]   [2022]   [Apr]   [14]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.4 229/475] misc: alcor_pci: Fix an error handling path
    Date
    From: Christophe JAILLET <christophe.jaillet@wanadoo.fr>

    [ Upstream commit 5b3dc949f554379edcb8ef6111aa5ecb78feb798 ]

    A successful ida_simple_get() should be balanced by a corresponding
    ida_simple_remove().

    Add the missing call in the error handling path of the probe.

    While at it, switch to ida_alloc()/ida_free() instead to
    ida_simple_get()/ida_simple_remove().
    The latter is deprecated and more verbose.

    Fixes: 4f556bc04e3c ("misc: cardreader: add new Alcor Micro Cardreader PCI driver")
    Reviewed-by: Oleksij Rempel <o.rempel@pengutronix.de>
    Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
    Link: https://lore.kernel.org/r/918a9875b7f67b7f8f123c4446452603422e8c5e.1644136776.git.christophe.jaillet@wanadoo.fr
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/misc/cardreader/alcor_pci.c | 9 ++++++---
    1 file changed, 6 insertions(+), 3 deletions(-)

    diff --git a/drivers/misc/cardreader/alcor_pci.c b/drivers/misc/cardreader/alcor_pci.c
    index 1fadb95b85b0..ba5d5c102b3c 100644
    --- a/drivers/misc/cardreader/alcor_pci.c
    +++ b/drivers/misc/cardreader/alcor_pci.c
    @@ -260,7 +260,7 @@ static int alcor_pci_probe(struct pci_dev *pdev,
    if (!priv)
    return -ENOMEM;

    - ret = ida_simple_get(&alcor_pci_idr, 0, 0, GFP_KERNEL);
    + ret = ida_alloc(&alcor_pci_idr, GFP_KERNEL);
    if (ret < 0)
    return ret;
    priv->id = ret;
    @@ -274,7 +274,8 @@ static int alcor_pci_probe(struct pci_dev *pdev,
    ret = pci_request_regions(pdev, DRV_NAME_ALCOR_PCI);
    if (ret) {
    dev_err(&pdev->dev, "Cannot request region\n");
    - return -ENOMEM;
    + ret = -ENOMEM;
    + goto error_free_ida;
    }

    if (!(pci_resource_flags(pdev, bar) & IORESOURCE_MEM)) {
    @@ -318,6 +319,8 @@ static int alcor_pci_probe(struct pci_dev *pdev,

    error_release_regions:
    pci_release_regions(pdev);
    +error_free_ida:
    + ida_free(&alcor_pci_idr, priv->id);
    return ret;
    }

    @@ -331,7 +334,7 @@ static void alcor_pci_remove(struct pci_dev *pdev)

    mfd_remove_devices(&pdev->dev);

    - ida_simple_remove(&alcor_pci_idr, priv->id);
    + ida_free(&alcor_pci_idr, priv->id);

    pci_release_regions(pdev);
    pci_set_drvdata(pdev, NULL);
    --
    2.34.1


    \
     
     \ /
      Last update: 2022-04-14 17:09    [W:2.200 / U:0.064 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site