summaryrefslogtreecommitdiff
path: root/drivers/staging/comedi/drivers/das16.c
diff options
context:
space:
mode:
authorIan Abbott <abbotti@mev.co.uk>2014-10-29 17:35:11 +0000
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2014-10-30 13:29:31 -0700
commitab784e5075698ed3b767d5e264a50aab39add209 (patch)
tree34e61d23a1ade524ddd6017a868254d6a291bb20 /drivers/staging/comedi/drivers/das16.c
parent35438c0011c3a3ba120ad78ea99bf38f009dc736 (diff)
staging: comedi: das16: deschedule timer routine on detach
The "das16" driver optionally uses a kernel timer and a DMA channel to support asynchronous data acquisition, but currently never calls `del_timer_sync()`. There is some possibility the timer routine could still be scheduled to run when the comedi "detach" handler is run to clean up the device and cause a certain amount of havoc. Avoid that by calling `del_time_sync()` in the comedi "detach" handler `das16_detach()` if the timer was initialized by the "attach" handler `das16_attach()`. Use the timer's `data` member to tell whether it was initialized or not. Signed-off-by: Ian Abbott <abbotti@mev.co.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/staging/comedi/drivers/das16.c')
-rw-r--r--drivers/staging/comedi/drivers/das16.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/drivers/staging/comedi/drivers/das16.c b/drivers/staging/comedi/drivers/das16.c
index aa9e3e10d59d..4556af109eae 100644
--- a/drivers/staging/comedi/drivers/das16.c
+++ b/drivers/staging/comedi/drivers/das16.c
@@ -1228,6 +1228,8 @@ static void das16_detach(struct comedi_device *dev)
int i;
if (devpriv) {
+ if (devpriv->timer.data)
+ del_timer_sync(&devpriv->timer);
if (dev->iobase)
das16_reset(dev);