All of lore.kernel.org
 help / color / mirror / Atom feed
From: Luis Henriques <luis.henriques@canonical.com>
To: Jiri Slaby <jslaby@suse.cz>
Cc: stable@vger.kernel.org, Ian Abbott <abbotti@mev.co.uk>
Subject: Re: [patch added to the 3.12 stable tree] staging: comedi: usbduxsigma: don't clobber ai_timer in command test
Date: Tue, 22 Sep 2015 19:47:31 +0100	[thread overview]
Message-ID: <20150922184731.GA13426@charon> (raw)
In-Reply-To: <1442432295-7805-1-git-send-email-jslaby@suse.cz>

On Wed, Sep 16, 2015 at 09:38:12PM +0200, Jiri Slaby wrote:
> From: Ian Abbott <abbotti@mev.co.uk>
> 
> This patch has been added to the 3.12 stable tree. If you have any
> objections, please let us know.
>

Please note that this commit (and the next one) were tagged for
kernels >= 3.19.

Cheers,
--
Lu�s


> ===============
> 
> commit 423b24c37dd5794a674c74b0ed56392003a69891 upstream
> 
> `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()`.
> 
> ** This backported patch also moves the code that sets up
> `devpriv->ai_sample_count` and `devpriv->ai_continuous` from
> `usbduxsigma_ai_cmdtest()` to `usbduxsigma_ai_cmd()` for the same reason
> as above. (This was not needed in the upstream commit.) **
> 
> 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 <abbotti@mev.co.uk>
> Signed-off-by: Jiri Slaby <jslaby@suse.cz>
> ---
>  drivers/staging/comedi/drivers/usbduxsigma.c | 58 +++++++++++++---------------
>  1 file changed, 27 insertions(+), 31 deletions(-)
> 
> diff --git a/drivers/staging/comedi/drivers/usbduxsigma.c b/drivers/staging/comedi/drivers/usbduxsigma.c
> index c47f4087568f..c61a1b9d7cd8 100644
> --- a/drivers/staging/comedi/drivers/usbduxsigma.c
> +++ b/drivers/staging/comedi/drivers/usbduxsigma.c
> @@ -575,37 +575,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 (cmd->stop_src == TRIG_COUNT) {
> -		/* data arrives as one packet */
> -		devpriv->ai_sample_count = cmd->stop_arg;
> -		devpriv->ai_continuous = 0;
> -	} else {
> -		/* continuous acquisition */
> -		devpriv->ai_continuous = 1;
> -		devpriv->ai_sample_count = 0;
> -	}
> -
> -	if (err)
> -		return 4;
> -
>  	return 0;
>  }
>  
> @@ -704,6 +673,33 @@ static int usbduxsigma_ai_cmd(struct comedi_device *dev,
>  
>  	/* set current channel of the running acquisition to zero */
>  	s->async->cur_chan = 0;
> +
> +	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;
> +	}
> +
> +	if (cmd->stop_src == TRIG_COUNT) {
> +		/* data arrives as one packet */
> +		devpriv->ai_sample_count = cmd->stop_arg;
> +		devpriv->ai_continuous = 0;
> +	} else {
> +		/* continuous acquisition */
> +		devpriv->ai_continuous = 1;
> +		devpriv->ai_sample_count = 0;
> +	}
> +
>  	for (i = 0; i < len; i++) {
>  		unsigned int chan  = CR_CHAN(cmd->chanlist[i]);
>  
> -- 
> 2.5.2
> 
> --
> To unsubscribe from this list: send the line "unsubscribe stable" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

  parent reply	other threads:[~2015-09-22 18:47 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-09-16 19:38 [patch added to the 3.12 stable tree] staging: comedi: usbduxsigma: don't clobber ai_timer in command test Jiri Slaby
2015-09-16 19:38 ` [patch added to the 3.12 stable tree] staging: comedi: usbduxsigma: don't clobber ao_timer " Jiri Slaby
2015-09-16 19:38 ` [patch added to the 3.12 stable tree] staging: comedi: adl_pci7x3x: fix digital output on PCI-7230 Jiri Slaby
2015-09-16 19:38 ` [patch added to the 3.12 stable tree] ext4: move check under lock scope to close a race Jiri Slaby
2015-09-22 18:47 ` Luis Henriques [this message]
2015-09-22 19:29   ` [patch added to the 3.12 stable tree] staging: comedi: usbduxsigma: don't clobber ai_timer in command test Jiri Slaby
2015-09-22 21:48     ` Luis Henriques
2015-09-23  6:54       ` Jiri Slaby
2015-09-23  9:30       ` Ian Abbott

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20150922184731.GA13426@charon \
    --to=luis.henriques@canonical.com \
    --cc=abbotti@mev.co.uk \
    --cc=jslaby@suse.cz \
    --cc=stable@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.