Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754808AbbGXRDc (ORCPT ); Fri, 24 Jul 2015 13:03:32 -0400 Received: from sidious.london.02.net ([82.132.130.152]:40823 "EHLO mail.o2.co.uk" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1753887AbbGXRDa (ORCPT ); Fri, 24 Jul 2015 13:03:30 -0400 X-Greylist: delayed 338 seconds by postgrey-1.27 at vger.kernel.org; Fri, 24 Jul 2015 13:03:30 EDT Message-ID: <55B26E81.2060105@berndporr.me.uk> Date: Fri, 24 Jul 2015 17:57:37 +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 1/6] staging: comedi: usbduxsigma: don't clobber ai_timer in command test References: <1437666422-25222-1-git-send-email-abbotti@mev.co.uk> <1437666422-25222-2-git-send-email-abbotti@mev.co.uk> In-Reply-To: <1437666422-25222-2-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: 3294 Lines: 91 Reviewed-by: Bernd Porr Ian Abbott wrote: > `devpriv->ai_timer` is used while an asynchronous command is running on > the AI subdevice. It also gets modified by the subdevice's `cmdtest` > handler for checking new asynchronous commands > (`usbduxsigma_ai_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->ai_timer` and > `devpriv->ai_interval` into the subdevice's `cmd` handler, > `usbduxsigma_ai_cmd()`. > > Note that the removed code in `usbduxsigma_ai_cmdtest()` checked that > `devpriv->ai_timer` did not end up less than than 1, but that could not > happen because `cmd->scan_begin_arg` had already been checked to be at > least the minimum required value (at least when `cmd->scan_begin_src == > TRIG_TIMER`, which had also been checked to be the case). > > Fixes: b986be8527c7 ("staging: comedi: usbduxsigma: tidy up analog input command support) > Signed-off-by: Ian Abbott > Cc: # 3.19 onwards > --- > drivers/staging/comedi/drivers/usbduxsigma.c | 37 ++++++++++++---------------- > 1 file changed, 16 insertions(+), 21 deletions(-) > > diff --git a/drivers/staging/comedi/drivers/usbduxsigma.c b/drivers/staging/comedi/drivers/usbduxsigma.c > index eaa9add..22517de 100644 > --- a/drivers/staging/comedi/drivers/usbduxsigma.c > +++ b/drivers/staging/comedi/drivers/usbduxsigma.c > @@ -550,27 +550,6 @@ static int usbduxsigma_ai_cmdtest(struct comedi_device *dev, > if (err) > return 3; > > - /* Step 4: fix up any arguments */ > - > - if (high_speed) { > - /* > - * every 2 channels get a time window of 125us. Thus, if we > - * sample all 16 channels we need 1ms. If we sample only one > - * channel we need only 125us > - */ > - devpriv->ai_interval = interval; > - devpriv->ai_timer = cmd->scan_begin_arg / (125000 * interval); > - } else { > - /* interval always 1ms */ > - devpriv->ai_interval = 1; > - devpriv->ai_timer = cmd->scan_begin_arg / 1000000; > - } > - if (devpriv->ai_timer < 1) > - err |= -EINVAL; > - > - if (err) > - return 4; > - > return 0; > } > > @@ -668,6 +647,22 @@ static int usbduxsigma_ai_cmd(struct comedi_device *dev, > > down(&devpriv->sem); > > + if (devpriv->high_speed) { > + /* > + * every 2 channels get a time window of 125us. Thus, if we > + * sample all 16 channels we need 1ms. If we sample only one > + * channel we need only 125us > + */ > + unsigned int interval = usbduxsigma_chans_to_interval(len); > + > + devpriv->ai_interval = interval; > + devpriv->ai_timer = cmd->scan_begin_arg / (125000 * interval); > + } else { > + /* interval always 1ms */ > + devpriv->ai_interval = 1; > + devpriv->ai_timer = cmd->scan_begin_arg / 1000000; > + } > + > for (i = 0; i < len; i++) { > unsigned int chan = CR_CHAN(cmd->chanlist[i]); > -- 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/