Skip to content

Commit

Permalink
media: ipu3-cio2: Fix reference counting when looping over ACPI devices
Browse files Browse the repository at this point in the history
[ Upstream commit 2cb2705 ]

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: 803abec ("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>
  • Loading branch information
andy-shev authored and gregkh committed Jul 14, 2021
1 parent 1b76864 commit ba10157
Showing 1 changed file with 5 additions and 5 deletions.
10 changes: 5 additions & 5 deletions drivers/media/pci/intel/ipu3/cio2-bridge.c
Original file line number Diff line number Diff line change
Expand Up @@ -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];
Expand Down Expand Up @@ -228,7 +229,6 @@ static int cio2_bridge_connect_sensor(const struct cio2_sensor_config *cfg,
software_node_unregister_nodes(sensor->swnodes);
err_put_adev:
acpi_dev_put(sensor->adev);
err_out:
return ret;
}

Expand Down

0 comments on commit ba10157

Please sign in to comment.