public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH V2] staging: dgap: introduce dgap_stop()
@ 2014-10-09  4:40 Daeseok Youn
  2014-10-09  9:49 ` Sudip Mukherjee
  0 siblings, 1 reply; 4+ messages in thread
From: Daeseok Youn @ 2014-10-09  4:40 UTC (permalink / raw)
  To: lidza.louina, markh
  Cc: markh, daeseok.youn, gregkh, driverdev-devel, devel, linux-kernel,
	dan.carpenter

The dgap_init_module() need to unwind for cleanup variables properly.
Because dgap_init_module() calls dgap_cleanup_module() for freeing
variables but this function is possible to free variables
which are not allocated.

Signed-off-by: Daeseok Youn <daeseok.youn@gmail.com>
---
V2: change ulong which is non-standard to "unsigned long".

 drivers/staging/dgap/dgap.c |   27 ++++++++++++++++++++++-----
 1 files changed, 22 insertions(+), 5 deletions(-)

diff --git a/drivers/staging/dgap/dgap.c b/drivers/staging/dgap/dgap.c
index 7c79fe6..290ca3b 100644
--- a/drivers/staging/dgap/dgap.c
+++ b/drivers/staging/dgap/dgap.c
@@ -71,6 +71,7 @@ MODULE_DESCRIPTION("Driver for the Digi International EPCA PCI based product lin
 MODULE_SUPPORTED_DEVICE("dgap");
 
 static int dgap_start(void);
+static void dgap_stop(void);
 static void dgap_init_globals(void);
 static struct board_t *dgap_found_board(struct pci_dev *pdev, int id,
 					int boardnum);
@@ -479,19 +480,20 @@ static int dgap_init_module(void)
 
 	rc = pci_register_driver(&dgap_driver);
 	if (rc)
-		goto err_cleanup;
+		goto err_stop;
 
 	rc = dgap_create_driver_sysfiles(&dgap_driver);
 	if (rc)
-		goto err_cleanup;
+		goto err_unregister;
 
 	dgap_driver_state = DRIVER_READY;
 
 	return 0;
 
-err_cleanup:
-
-	dgap_cleanup_module();
+err_unregister:
+	pci_unregister_driver(&dgap_driver);
+err_stop:
+	dgap_stop();
 
 	return rc;
 }
@@ -561,6 +563,21 @@ failed_class:
 	return rc;
 }
 
+static void dgap_stop(void)
+{
+	unsigned long lock_flags;
+
+	spin_lock_irqsave(&dgap_poll_lock, lock_flags);
+	dgap_poll_stop = 1;
+	spin_unlock_irqrestore(&dgap_poll_lock, lock_flags);
+
+	del_timer_sync(&dgap_poll_timer);
+
+	device_destroy(dgap_class, MKDEV(DIGI_DGAP_MAJOR, 0));
+	class_destroy(dgap_class);
+	unregister_chrdev(DIGI_DGAP_MAJOR, "dgap");
+}
+
 static int dgap_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
 {
 	int rc;
-- 
1.7.1


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH V2] staging: dgap: introduce dgap_stop()
  2014-10-09  4:40 [PATCH V2] staging: dgap: introduce dgap_stop() Daeseok Youn
@ 2014-10-09  9:49 ` Sudip Mukherjee
  2014-10-09 10:23   ` Dan Carpenter
  0 siblings, 1 reply; 4+ messages in thread
From: Sudip Mukherjee @ 2014-10-09  9:49 UTC (permalink / raw)
  To: Daeseok Youn
  Cc: lidza.louina, markh, gregkh, driverdev-devel, devel, linux-kernel,
	dan.carpenter

On Thu, Oct 09, 2014 at 01:40:11PM +0900, Daeseok Youn wrote:
> The dgap_init_module() need to unwind for cleanup variables properly.
> Because dgap_init_module() calls dgap_cleanup_module() for freeing
> variables but this function is possible to free variables
> which are not allocated.
> 
> Signed-off-by: Daeseok Youn <daeseok.youn@gmail.com>
> ---
> V2: change ulong which is non-standard to "unsigned long".
I think , Dan, in his review of your v1 , asked you to rearrange the functions and get rid of the forward declarations.

thanks
sudip

> 
>  drivers/staging/dgap/dgap.c |   27 ++++++++++++++++++++++-----
>  1 files changed, 22 insertions(+), 5 deletions(-)
> 
> diff --git a/drivers/staging/dgap/dgap.c b/drivers/staging/dgap/dgap.c
> index 7c79fe6..290ca3b 100644
> --- a/drivers/staging/dgap/dgap.c
> +++ b/drivers/staging/dgap/dgap.c
> @@ -71,6 +71,7 @@ MODULE_DESCRIPTION("Driver for the Digi International EPCA PCI based product lin
>  MODULE_SUPPORTED_DEVICE("dgap");
>  
>  static int dgap_start(void);
> +static void dgap_stop(void);
>  static void dgap_init_globals(void);
>  static struct board_t *dgap_found_board(struct pci_dev *pdev, int id,
>  					int boardnum);
> @@ -479,19 +480,20 @@ static int dgap_init_module(void)
>  
>  	rc = pci_register_driver(&dgap_driver);
>  	if (rc)
> -		goto err_cleanup;
> +		goto err_stop;
>  
>  	rc = dgap_create_driver_sysfiles(&dgap_driver);
>  	if (rc)
> -		goto err_cleanup;
> +		goto err_unregister;
>  
>  	dgap_driver_state = DRIVER_READY;
>  
>  	return 0;
>  
> -err_cleanup:
> -
> -	dgap_cleanup_module();
> +err_unregister:
> +	pci_unregister_driver(&dgap_driver);
> +err_stop:
> +	dgap_stop();
>  
>  	return rc;
>  }
> @@ -561,6 +563,21 @@ failed_class:
>  	return rc;
>  }
>  
> +static void dgap_stop(void)
> +{
> +	unsigned long lock_flags;
> +
> +	spin_lock_irqsave(&dgap_poll_lock, lock_flags);
> +	dgap_poll_stop = 1;
> +	spin_unlock_irqrestore(&dgap_poll_lock, lock_flags);
> +
> +	del_timer_sync(&dgap_poll_timer);
> +
> +	device_destroy(dgap_class, MKDEV(DIGI_DGAP_MAJOR, 0));
> +	class_destroy(dgap_class);
> +	unregister_chrdev(DIGI_DGAP_MAJOR, "dgap");
> +}
> +
>  static int dgap_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
>  {
>  	int rc;
> -- 
> 1.7.1
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at  http://www.tux.org/lkml/

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH V2] staging: dgap: introduce dgap_stop()
  2014-10-09  9:49 ` Sudip Mukherjee
@ 2014-10-09 10:23   ` Dan Carpenter
  2014-10-09 10:28     ` DaeSeok Youn
  0 siblings, 1 reply; 4+ messages in thread
From: Dan Carpenter @ 2014-10-09 10:23 UTC (permalink / raw)
  To: Sudip Mukherjee
  Cc: Daeseok Youn, devel, lidza.louina, driverdev-devel, linux-kernel,
	gregkh

On Thu, Oct 09, 2014 at 03:19:03PM +0530, Sudip Mukherjee wrote:
> On Thu, Oct 09, 2014 at 01:40:11PM +0900, Daeseok Youn wrote:
> > The dgap_init_module() need to unwind for cleanup variables properly.
> > Because dgap_init_module() calls dgap_cleanup_module() for freeing
> > variables but this function is possible to free variables
> > which are not allocated.
> > 
> > Signed-off-by: Daeseok Youn <daeseok.youn@gmail.com>
> > ---
> > V2: change ulong which is non-standard to "unsigned long".
> I think , Dan, in his review of your v1 , asked you to rearrange the functions and get rid of the forward declarations.
> 

I was fine with v1 actually...  It's a bug fix, and this is staging and
there are tons of forward declarations already.  Eventually we need to
get rid of them but it can be done later.

regards,
dan carpenter


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH V2] staging: dgap: introduce dgap_stop()
  2014-10-09 10:23   ` Dan Carpenter
@ 2014-10-09 10:28     ` DaeSeok Youn
  0 siblings, 0 replies; 4+ messages in thread
From: DaeSeok Youn @ 2014-10-09 10:28 UTC (permalink / raw)
  To: Dan Carpenter
  Cc: Sudip Mukherjee, devel, Lidza Louina, driverdev-devel,
	linux-kernel, Greg KH

Hi,

2014-10-09 19:23 GMT+09:00 Dan Carpenter <dan.carpenter@oracle.com>:
> On Thu, Oct 09, 2014 at 03:19:03PM +0530, Sudip Mukherjee wrote:
>> On Thu, Oct 09, 2014 at 01:40:11PM +0900, Daeseok Youn wrote:
>> > The dgap_init_module() need to unwind for cleanup variables properly.
>> > Because dgap_init_module() calls dgap_cleanup_module() for freeing
>> > variables but this function is possible to free variables
>> > which are not allocated.
>> >
>> > Signed-off-by: Daeseok Youn <daeseok.youn@gmail.com>
>> > ---
>> > V2: change ulong which is non-standard to "unsigned long".
>> I think , Dan, in his review of your v1 , asked you to rearrange the functions and get rid of the forward declarations.
>>
>
> I was fine with v1 actually...  It's a bug fix, and this is staging and
> there are tons of forward declarations already.  Eventually we need to
> get rid of them but it can be done later.
Yes, I will cleanup as your review.

thanks.

regards,
Daeseok Youn.

>
> regards,
> dan carpenter
>

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2014-10-09 10:29 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-10-09  4:40 [PATCH V2] staging: dgap: introduce dgap_stop() Daeseok Youn
2014-10-09  9:49 ` Sudip Mukherjee
2014-10-09 10:23   ` Dan Carpenter
2014-10-09 10:28     ` DaeSeok Youn

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox