lkml.org 
[lkml]   [2021]   [Jul]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.13 296/800] media: ipu3-cio2: Fix reference counting when looping over ACPI devices
    Date
    From: Andy Shevchenko <andy.shevchenko@gmail.com>

    [ Upstream commit 2cb2705cf7ffe41dc5bd81290e4241bfb7f031cc ]

    When we continue, due to device is disabled, loop we have to drop
    reference count. When we have an array full of devices we have to also
    drop the reference count. Note, in this case the
    cio2_bridge_unregister_sensors() is called by the caller.

    Fixes: 803abec64ef9 ("media: ipu3-cio2: Add cio2-bridge to ipu3-cio2 driver")
    Signed-off-by: Andy Shevchenko <andy.shevchenko@gmail.com>
    Reviewed-by: Daniel Scally <djrscally@gmail.com>
    Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
    Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/media/pci/intel/ipu3/cio2-bridge.c | 10 +++++-----
    1 file changed, 5 insertions(+), 5 deletions(-)

    diff --git a/drivers/media/pci/intel/ipu3/cio2-bridge.c b/drivers/media/pci/intel/ipu3/cio2-bridge.c
    index e8511787c1e4..4657e99df033 100644
    --- a/drivers/media/pci/intel/ipu3/cio2-bridge.c
    +++ b/drivers/media/pci/intel/ipu3/cio2-bridge.c
    @@ -173,14 +173,15 @@ static int cio2_bridge_connect_sensor(const struct cio2_sensor_config *cfg,
    int ret;

    for_each_acpi_dev_match(adev, cfg->hid, NULL, -1) {
    - if (!adev->status.enabled)
    + if (!adev->status.enabled) {
    + acpi_dev_put(adev);
    continue;
    + }

    if (bridge->n_sensors >= CIO2_NUM_PORTS) {
    + acpi_dev_put(adev);
    dev_err(&cio2->dev, "Exceeded available CIO2 ports\n");
    - cio2_bridge_unregister_sensors(bridge);
    - ret = -EINVAL;
    - goto err_out;
    + return -EINVAL;
    }

    sensor = &bridge->sensors[bridge->n_sensors];
    @@ -228,7 +229,6 @@ err_free_swnodes:
    software_node_unregister_nodes(sensor->swnodes);
    err_put_adev:
    acpi_dev_put(sensor->adev);
    -err_out:
    return ret;
    }

    --
    2.30.2


    \
     
     \ /
      Last update: 2021-07-12 10:40    [W:2.931 / U:0.492 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site