Patch "staging: comedi: usbduxsigma: don't clobber ao_timer in command test" has been added to the 4.1-stable tree
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 the 4.1-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
staging-comedi-usbduxsigma-don-t-clobber-ao_timer-in-command-test.patch
and it can be found in the queue-4.1 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
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
From: Ian Abbott <[email protected]>
commit c04a1f17803e0d3eeada586ca34a6b436959bc20 upstream.
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
@@ -912,25 +912,6 @@ static int usbduxsigma_ao_cmdtest(structif (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 ; }
@@ -943,6 +924,20 @@ static int usbduxsigma_ao_cmd(struct comdown (&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 ) {
Patches currently in stable-queue which might be from [email protected] are
queue-4.1/staging-comedi-usbduxsigma-don-t-clobber-ao_timer-in-command-test.patch queue-4.1/staging-comedi-adl_pci7x3x-fix-digital-output-on-pci-7230.patch queue-4.1/staging-comedi-usbduxsigma-don-t-clobber-ai_timer-in-command-test.patch