patch "staging: comedi: usbduxsigma: don't clobber ao_timer in command test" added to staging-next
Subsystems (2)
This is a note to let you know that I've just added the patch titled
staging: comedi: usbduxsigma: don't clobber ao_timer in command test
to my staging git tree which can be found at
git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging.git
in the staging-next branch.
The patch will show up in the next release of the linux-next tree (usually sometime within the next 24 hours during the week.)
The patch will also be merged in the next major kernel release during the merge window.
If you have any questions about this process, please let me know.
Quoted 1 line
From
c04a1f17803e0d3eeada586ca34a6b436959bc20Mon Sep 17 00:00:00 2001
From: Ian Abbott <[email protected]>
Date: Thu, 23 Jul 2015 16:46:58 +0100
Subject: staging: comedi: usbduxsigma: don't clobber ao_timer in command test
devpriv->ao_timer is used while an asynchronous command is running on the AO subdevice. It also gets modified by the subdevice's cmdtest handler for checking new asynchronous commands, usbduxsigma_ao_cmdtest(), which is not correct as it's allowed to check new commands while an old command is still running. Fix it by moving the code which sets up devpriv->ao_timer into the subdevice's cmd handler, usbduxsigma_ao_cmd().
Note that the removed code in usbduxsigma_ao_cmdtest() checked that devpriv->ao_timer did not end up less that 1, but that could not happen due because cmd->scan_begin_arg or cmd->convert_arg had already been range-checked.
Also note that we tested the high_speed variable in the old code, but that is currently always 0 and means that we always use "scan" timing (cmd->scan_begin_src == TRIG_TIMER and cmd->convert_src == TRIG_NOW) and never "convert" (individual sample) timing (cmd->scan_begin_src == TRIG_FOLLOW and cmd->convert_src == TRIG_TIMER). The moved code tests cmd->convert_src instead to decide whether "scan" or "convert" timing is being used, although currently only "scan" timing is supported.
--- drivers/staging/comedi/drivers/usbduxsigma.c | 33 ++++++++++++---------------- 1 file changed, 14 insertions(+), 19 deletions(-)
drivers/staging/comedi/drivers/usbduxsigma.c +14 -19
@@ -914,25 +914,6 @@ static int usbduxsigma_ao_cmdtest(struct comedi_device *dev,if (err)return 3 ; -/* Step 4: fix up any arguments */ - -/* we count in timer steps */ -if (high_speed) { -/* timing of the conversion itself: every 125 us */ - devpriv->ao_timer = cmd->convert_arg /125000 ; - }else { -/* -* timing of the scan: every 1ms -* we get all channels at once -*/ - devpriv->ao_timer = cmd->scan_begin_arg /1000000 ; - } -if (devpriv->ao_timer <1 ) - err |= -EINVAL ; - -if (err) -return 4 ; -return 0 ; }
@@ -945,6 +926,20 @@ static int usbduxsigma_ao_cmd(struct comedi_device *dev,down (&devpriv->sem); +if (cmd->convert_src ==TRIG_TIMER ) { +/* +* timing of the conversion itself: every 125 us +* at high speed (not used yet) +*/ + devpriv->ao_timer = cmd->convert_arg /125000 ; + }else { +/* +* timing of the scan: every 1ms +* we get all channels at once +*/ + devpriv->ao_timer = cmd->scan_begin_arg /1000000 ; + } + devpriv->ao_counter = devpriv->ao_timer;if (cmd->start_src ==TRIG_NOW ) {
Signature · 1 line
2.4.6