staging: dgap: introduce dgap_stop()
PATCH 3/3 staging: dgap: introduce dgap_stop()
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.
--- drivers/staging/dgap/dgap.c | 27 ++++++++++++++++++++++----- 1 files changed, 22 insertions(+), 5 deletions(-)
drivers/staging/dgap/dgap.c +22 -5
@@ -71,6 +71,7 @@ MODULE_DESCRIPTION("Driver for the Digi International EPCA PCI based product linMODULE_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 ) +{ +ulong 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;
Signature · 1 line
1.7.1
All three of these patches are good and a nice improvement. This one is a good bugfix. I have some notes for later, though below.
drivers/staging/dgap/dgap.c MODULE_DESCRIPTION("Driver for the Digi International EPCA PCI based product lin · line 74
Quoted 9 lines · Daeseok Youn
drivers/staging/dgap/dgap.c +1
-0@@ -71,6 +71,7 @@ MODULE_DESCRIPTION("Driver for the Digi International EPCA PCI based product linMODULE_SUPPORTED_DEVICE ("dgap" );static int dgap_start (void ); +static void dgap_stop (void );
These kinds of forward declarations are annoying. The whole file needs to be re-arranged so that we don't have to deal with them.
drivers/staging/dgap/dgap.c failed_class: · line 568
Quoted 7 lines
drivers/staging/dgap/dgap.c +3
-0@@ -561,6 +563,21 @@ failed_class:return rc; } +static void dgap_stop (void ) +{ +ulong lock_flags;
This is non-standard. Traditionally it would be:
unsigned long flags;
regards,
dan carpenter
Hi, Dan
2014-10-08 20:37 GMT+09:00 Dan Carpenter <[email protected]>:
Quoted 11 lines
All three of these patches are good and a nice improvement. This one is a good bugfix. I have some notes for later, though below.
Quoted 7 lines · Daeseok Youn
drivers/staging/dgap/dgap.c +0
-0@@ -71,6 +71,7 @@ MODULE_DESCRIPTION("Driver for the Digi International EPCA PCI based product linMODULE_SUPPORTED_DEVICE ("dgap" );
Quoted 5 lines
drivers/staging/dgap/dgap.c MODULE_DESCRIPTION("Driver for the Digi International EPCA PCI based product lin · line 74
Quoted 2 lines
drivers/staging/dgap/dgap.c +1
-0static int dgap_start (void ); +static void dgap_stop (void );These kinds of forward declarations are annoying. The whole file needs to be re-arranged so that we don't have to deal with them.
OK. I will try to re-arrange and remove forward declarations.
Quoted 8 lines
drivers/staging/dgap/dgap.c failed_class: · line 568
Quoted 8 lines
drivers/staging/dgap/dgap.c +3
-0@@ -561,6 +563,21 @@ failed_class:return rc; } +static void dgap_stop (void ) +{ +ulong lock_flags;
OK. I will send this patch again after changing ulong to "unsigned long".
Quoted 7 lines
This is non-standard. Traditionally it would be:
unsigned long flags;regards,
dan carpenter
Thanks
regards,
Daeseok Youn