Re: [PATCH 03/11] rcar-vin: Improve async notifier cleanup paths

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Niklas

On Tue, Apr 13, 2021 at 08:02:45PM +0200, Niklas Söderlund wrote:
> The cleanup code for the async notifiers can be refactored to own
> functions to reduce code duplication and improve readability. While at
> it rename the CSI-2 initialization function _csi2_ instead of _mc_ to
> match.
>
> Signed-off-by: Niklas Söderlund <niklas.soderlund+renesas@xxxxxxxxxxxx>
> ---
>  drivers/media/platform/rcar-vin/rcar-core.c | 51 ++++++++++++---------
>  1 file changed, 30 insertions(+), 21 deletions(-)
>
> diff --git a/drivers/media/platform/rcar-vin/rcar-core.c b/drivers/media/platform/rcar-vin/rcar-core.c
> index d4932f7b42647ee1..da23d55aa72b7f0d 100644
> --- a/drivers/media/platform/rcar-vin/rcar-core.c
> +++ b/drivers/media/platform/rcar-vin/rcar-core.c
> @@ -383,6 +383,16 @@ static void rvin_group_put(struct rvin_dev *vin)
>  	kref_put(&group->refcount, rvin_group_release);
>  }
>
> +static void rvin_group_notifier_cleanup(struct rvin_dev *vin)
> +{
> +	mutex_lock(&vin->group->lock);
> +	if (&vin->v4l2_dev == vin->group->notifier.v4l2_dev) {
> +		v4l2_async_notifier_unregister(&vin->group->notifier);
> +		v4l2_async_notifier_cleanup(&vin->group->notifier);
> +	}
> +	mutex_unlock(&vin->group->lock);
> +}
> +
>  /* -----------------------------------------------------------------------------
>   * Controls
>   */
> @@ -676,6 +686,12 @@ static int rvin_parallel_parse_of(struct rvin_dev *vin)
>  	return ret;
>  }
>
> +static void rvin_parallel_cleanup(struct rvin_dev *vin)
> +{
> +	v4l2_async_notifier_unregister(&vin->notifier);
> +	v4l2_async_notifier_cleanup(&vin->notifier);
> +}
> +
>  static int rvin_parallel_init(struct rvin_dev *vin)
>  {
>  	int ret;
> @@ -937,7 +953,16 @@ static int rvin_mc_parse_of_graph(struct rvin_dev *vin)
>  	return 0;
>  }
>
> -static int rvin_mc_init(struct rvin_dev *vin)
> +static void rvin_csi2_cleanup(struct rvin_dev *vin)
> +{
> +	if (!vin->info->use_mc)
> +		return;
> +
> +	rvin_group_notifier_cleanup(vin);
> +	rvin_group_put(vin);
> +}
> +
> +static int rvin_csi2_init(struct rvin_dev *vin)
>  {
>  	int ret;
>
> @@ -1445,7 +1470,7 @@ static int rcar_vin_probe(struct platform_device *pdev)
>  	platform_set_drvdata(pdev, vin);
>
>  	if (vin->info->use_mc) {
> -		ret = rvin_mc_init(vin);
> +		ret = rvin_csi2_init(vin);
>  		if (ret)
>  			goto error_dma_unregister;
>  	}
> @@ -1458,20 +1483,9 @@ static int rcar_vin_probe(struct platform_device *pdev)
>  	pm_runtime_enable(&pdev->dev);
>
>  	return 0;
> -

Intentional ?

Reviewed-by: Jacopo Mondi <jacopo+renesas@xxxxxxxxxx>

Thanks
   j

>  error_group_unregister:
>  	rvin_free_controls(vin);
> -
> -	if (vin->info->use_mc) {
> -		mutex_lock(&vin->group->lock);
> -		if (&vin->v4l2_dev == vin->group->notifier.v4l2_dev) {
> -			v4l2_async_notifier_unregister(&vin->group->notifier);
> -			v4l2_async_notifier_cleanup(&vin->group->notifier);
> -		}
> -		mutex_unlock(&vin->group->lock);
> -		rvin_group_put(vin);
> -	}
> -
> +	rvin_csi2_cleanup(vin);
>  error_dma_unregister:
>  	rvin_dma_unregister(vin);
>
> @@ -1486,14 +1500,9 @@ static int rcar_vin_remove(struct platform_device *pdev)
>
>  	rvin_v4l2_unregister(vin);
>
> -	v4l2_async_notifier_unregister(&vin->notifier);
> -	v4l2_async_notifier_cleanup(&vin->notifier);
> +	rvin_parallel_cleanup(vin);
>
> -	if (vin->info->use_mc) {
> -		v4l2_async_notifier_unregister(&vin->group->notifier);
> -		v4l2_async_notifier_cleanup(&vin->group->notifier);
> -		rvin_group_put(vin);
> -	}
> +	rvin_csi2_cleanup(vin);
>
>  	rvin_free_controls(vin);
>
> --
> 2.31.1
>



[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]

  Powered by Linux