Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754810AbbGXREc (ORCPT ); Fri, 24 Jul 2015 13:04:32 -0400 Received: from sidious.london.02.net ([82.132.130.152]:41490 "EHLO mail.o2.co.uk" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1754374AbbGXREa (ORCPT ); Fri, 24 Jul 2015 13:04:30 -0400 Message-ID: <55B26EB3.30602@berndporr.me.uk> Date: Fri, 24 Jul 2015 17:58:27 +0100 From: Bernd Porr User-Agent: Thunderbird 2.0.0.24 (X11/20100228) MIME-Version: 1.0 To: Ian Abbott CC: driverdev-devel@linuxdriverproject.org, Greg Kroah-Hartman , H Hartley Sweeten , linux-kernel@vger.kernel.org, stable@vger.kernel.org Subject: Re: [PATCH 2/6] staging: comedi: usbduxsigma: don't clobber ao_timer in command test References: <1437666422-25222-1-git-send-email-abbotti@mev.co.uk> <1437666422-25222-3-git-send-email-abbotti@mev.co.uk> In-Reply-To: <1437666422-25222-3-git-send-email-abbotti@mev.co.uk> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 3395 Lines: 94 Reviewed-by: Bernd Porr Ian Abbott wrote: > `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. > > Fixes: fb1ef622e7a3 ("staging: comedi: usbduxsigma: tidy up analog output command support") > Signed-off-by: Ian Abbott > Cc: # 3.19 onwards > --- > drivers/staging/comedi/drivers/usbduxsigma.c | 33 ++++++++++++---------------- > 1 file changed, 14 insertions(+), 19 deletions(-) > > diff --git a/drivers/staging/comedi/drivers/usbduxsigma.c b/drivers/staging/comedi/drivers/usbduxsigma.c > index 22517de..dc0b25a 100644 > --- a/drivers/staging/comedi/drivers/usbduxsigma.c > +++ b/drivers/staging/comedi/drivers/usbduxsigma.c > @@ -912,25 +912,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; > } > > @@ -943,6 +924,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) { -- http://www.berndporr.me.uk http://www.linux-usb-daq.co.uk http://www.imdb.com/name/nm3293421/ +44 (0)7840 340069 -- 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/