All of lore.kernel.org
 help / color / mirror / Atom feed
From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
To: Prabhakar Lad <prabhakar.csengg@gmail.com>
Cc: Hans Verkuil <hans.verkuil@cisco.com>,
	Mauro Carvalho Chehab <mchehab@redhat.com>,
	LMML <linux-media@vger.kernel.org>,
	DLOS <davinci-linux-open-source@linux.davincidsp.com>,
	LKML <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH v3 4/9] media: davinci: vpif_capture: move the freeing of irq and global variables to remove()
Date: Wed, 29 May 2013 04:32:30 +0200	[thread overview]
Message-ID: <2564718.Z6XYOtT7FL@avalon> (raw)
In-Reply-To: <1369569612-30915-5-git-send-email-prabhakar.csengg@gmail.com>

Hi Prabhakar,

Thanks for the patch.

On Sunday 26 May 2013 17:30:07 Prabhakar Lad wrote:
> From: Lad, Prabhakar <prabhakar.csengg@gmail.com>
> 
> Ideally the freeing of irq's and the global variables needs to be
> done in the remove() rather than module_exit(), this patch moves
> the freeing up of irq's and freeing the memory allocated to channel
> objects to remove() callback of struct platform_driver.
> 
> Signed-off-by: Lad, Prabhakar <prabhakar.csengg@gmail.com>
> ---
>  drivers/media/platform/davinci/vpif_capture.c |   31 ++++++++++------------
>  1 files changed, 13 insertions(+), 18 deletions(-)
> 
> diff --git a/drivers/media/platform/davinci/vpif_capture.c
> b/drivers/media/platform/davinci/vpif_capture.c index caaf4fe..f8b7304
> 100644
> --- a/drivers/media/platform/davinci/vpif_capture.c
> +++ b/drivers/media/platform/davinci/vpif_capture.c
> @@ -2225,17 +2225,29 @@ vpif_int_err:
>   */
>  static int vpif_remove(struct platform_device *device)
>  {
> -	int i;
> +	struct platform_device *pdev;
>  	struct channel_obj *ch;
> +	struct resource *res;
> +	int irq_num, i = 0;
> +
> +	pdev = container_of(vpif_dev, struct platform_device, dev);

As Sergei mentioned, the platform device is already passed to the function as 
an argument.

> +	while ((res = platform_get_resource(pdev, IORESOURCE_IRQ, i))) {
> +		for (irq_num = res->start; irq_num <= res->end; irq_num++)
> +			free_irq(irq_num,
> +				 (void *)(&vpif_obj.dev[i]->channel_id));

A quick look at board code shows that each IRQ resource contains a single IRQ. 
The second loop could thus be removed. You could also add another patch to 
perform similar cleanup for the probe code.

> +		i++;
> +	}
> 
>  	v4l2_device_unregister(&vpif_obj.v4l2_dev);
> 
> +	kfree(vpif_obj.sd);
>  	/* un-register device */
>  	for (i = 0; i < VPIF_CAPTURE_MAX_DEVICES; i++) {
>  		/* Get the pointer to the channel object */
>  		ch = vpif_obj.dev[i];
>  		/* Unregister video device */
>  		video_unregister_device(ch->video_dev);
> +		kfree(vpif_obj.dev[i]);
>  	}
>  	return 0;
>  }
> @@ -2347,24 +2359,7 @@ static __init int vpif_init(void)
>   */
>  static void vpif_cleanup(void)
>  {
> -	struct platform_device *pdev;
> -	struct resource *res;
> -	int irq_num;
> -	int i = 0;
> -
> -	pdev = container_of(vpif_dev, struct platform_device, dev);
> -	while ((res = platform_get_resource(pdev, IORESOURCE_IRQ, i))) {
> -		for (irq_num = res->start; irq_num <= res->end; irq_num++)
> -			free_irq(irq_num,
> -				 (void *)(&vpif_obj.dev[i]->channel_id));
> -		i++;
> -	}
> -
>  	platform_driver_unregister(&vpif_driver);
> -
> -	kfree(vpif_obj.sd);
> -	for (i = 0; i < VPIF_CAPTURE_MAX_DEVICES; i++)
> -		kfree(vpif_obj.dev[i]);
>  }
> 
>  /* Function for module initialization and cleanup */
-- 
Regards,

Laurent Pinchart


  parent reply	other threads:[~2013-05-29  2:32 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-05-26 12:00 [PATCH v3 0/9] media: davinci: vpif trivial cleanup Prabhakar Lad
2013-05-26 12:00 ` [PATCH v3 1/9] media: davinci: vpif: remove unwanted header mach/hardware.h and sort the includes alphabetically Prabhakar Lad
2013-05-26 12:00 ` [PATCH v3 2/9] media: davinci: vpif: Convert to devm_* api Prabhakar Lad
2013-05-26 14:37   ` Sergei Shtylyov
2013-05-26 12:00 ` [PATCH v3 3/9] media: davinci: vpif: remove unnecessary braces around defines Prabhakar Lad
2013-05-26 12:00 ` [PATCH v3 4/9] media: davinci: vpif_capture: move the freeing of irq and global variables to remove() Prabhakar Lad
2013-05-26 14:47   ` Sergei Shtylyov
2013-05-29  2:32   ` Laurent Pinchart [this message]
2013-05-29  4:14     ` Prabhakar Lad
2013-05-26 12:00 ` [PATCH v3 5/9] media: davinci: vpif_capture: use module_platform_driver() Prabhakar Lad
2013-05-29  3:34   ` Laurent Pinchart
2013-05-26 12:00 ` [PATCH v3 6/9] media: davinci: vpif_capture: Convert to devm_* api Prabhakar Lad
2013-05-29  3:37   ` Laurent Pinchart
2013-05-26 12:00 ` [PATCH v3 7/9] media: davinci: vpif_display: move the freeing of irq and global variables to remove() Prabhakar Lad
2013-05-26 12:00 ` [PATCH v3 8/9] media: davinci: vpif_display: use module_platform_driver() Prabhakar Lad
2013-05-29  3:34   ` Laurent Pinchart
2013-05-26 12:00 ` [PATCH v3 9/9] media: davinci: vpif_display: Convert to devm_* api Prabhakar Lad
2013-05-29  3:38   ` Laurent Pinchart
2013-05-29  4:15     ` Prabhakar Lad

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=2564718.Z6XYOtT7FL@avalon \
    --to=laurent.pinchart@ideasonboard.com \
    --cc=davinci-linux-open-source@linux.davincidsp.com \
    --cc=hans.verkuil@cisco.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-media@vger.kernel.org \
    --cc=mchehab@redhat.com \
    --cc=prabhakar.csengg@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.