driverdev-devel.linuxdriverproject.org archive mirror
 help / color / mirror / Atom feed
From: Ian Abbott <abbotti@mev.co.uk>
To: Bernd Porr <mail@berndporr.me.uk>, gregkh@linuxfoundation.org
Cc: driverdev-devel@linuxdriverproject.org
Subject: Re: [PATCH] staging: comedi: usbduxsigma: usbduxfast_ai_cmdtest rounding error
Date: Mon, 18 Nov 2019 18:04:38 +0000	[thread overview]
Message-ID: <02cd939a-3d1a-01d8-c730-5d0a6881df2b@mev.co.uk> (raw)
In-Reply-To: <20191118172155.5314-1-mail@berndporr.me.uk>

On 18/11/2019 17:21, Bernd Porr wrote:
> 'get_cmd_generic_timed' fills the cmd structure with an informed
> guess and then calls 'usbduxfast_ai_cmdtest' repeatedly while
> 'usbduxfast_ai_cmdtest' is modifying the cmd struct until it
> no longer changes. However, because of rounding errors this never
> converged because 'steps = (cmd->convert_arg * 30) / 1000' and then
> back to 'cmd->convert_arg = (steps * 1000) / 30' won't be the same
> because of rounding errors. 'Steps' should only be converted back to
> the 'convert_arg' if 'steps' has actually been modified. In addion
> the case of steps being 0 wasn't checked which is also now done.
> 
> Signed-off-by: Bernd Porr <mail@berndporr.me.uk>

The patch subject needs changing as it refers to usbduxsigma, and this 
patch is for usbduxfast.

While we're at it, there is a typo in the patch description "addion" => 
"addition".

Also, make it clear that 'get_cmd_generic_timed' is the user-space 
comedilib function 'comedi_get_cmd_generic_timed()'.

> ---
>   drivers/staging/comedi/drivers/usbduxfast.c | 21 ++++++++++++++-------
>   1 file changed, 14 insertions(+), 7 deletions(-)
> 
> diff --git a/drivers/staging/comedi/drivers/usbduxfast.c b/drivers/staging/comedi/drivers/usbduxfast.c
> index 04bc488385e6..4af012968cb6 100644
> --- a/drivers/staging/comedi/drivers/usbduxfast.c
> +++ b/drivers/staging/comedi/drivers/usbduxfast.c
> @@ -1,6 +1,6 @@
>   // SPDX-License-Identifier: GPL-2.0+
>   /*
> - *  Copyright (C) 2004-2014 Bernd Porr, mail@berndporr.me.uk
> + *  Copyright (C) 2004-2019 Bernd Porr, mail@berndporr.me.uk
>    */
>   
>   /*
> @@ -8,7 +8,7 @@
>    * Description: University of Stirling USB DAQ & INCITE Technology Limited
>    * Devices: [ITL] USB-DUX-FAST (usbduxfast)
>    * Author: Bernd Porr <mail@berndporr.me.uk>
> - * Updated: 10 Oct 2014
> + * Updated: 16 Nov 2019
>    * Status: stable
>    */
>   
> @@ -22,6 +22,7 @@
>    *
>    *
>    * Revision history:
> + * 1.0: Fixed a rounding error in usbduxfast_ai_cmdtest
>    * 0.9: Dropping the first data packet which seems to be from the last transfer.
>    *      Buffer overflows in the FX2 are handed over to comedi.
>    * 0.92: Dropping now 4 packets. The quad buffer has to be emptied.
> @@ -350,6 +351,7 @@ static int usbduxfast_ai_cmdtest(struct comedi_device *dev,
>   				 struct comedi_cmd *cmd)
>   {
>   	int err = 0;
> +	int err2 = 0;
>   	unsigned int steps;
>   	unsigned int arg;
>   
> @@ -399,11 +401,16 @@ static int usbduxfast_ai_cmdtest(struct comedi_device *dev,
>   	 */
>   	steps = (cmd->convert_arg * 30) / 1000;
>   	if (cmd->chanlist_len !=  1)
> -		err |= comedi_check_trigger_arg_min(&steps,
> -						    MIN_SAMPLING_PERIOD);
> -	err |= comedi_check_trigger_arg_max(&steps, MAX_SAMPLING_PERIOD);
> -	arg = (steps * 1000) / 30;
> -	err |= comedi_check_trigger_arg_is(&cmd->convert_arg, arg);
> +		err2 |= comedi_check_trigger_arg_min(&steps,
> +						     MIN_SAMPLING_PERIOD);
> +	else
> +		err2 |= comedi_check_trigger_arg_min(&steps, 1);
> +	err2 |= comedi_check_trigger_arg_max(&steps, MAX_SAMPLING_PERIOD);
> +	if (err2) {
> +		err |= err2;
> +		arg = (steps * 1000) / 30;
> +		err |= comedi_check_trigger_arg_is(&cmd->convert_arg, arg);
> +	}
>   
>   	if (cmd->stop_src == TRIG_COUNT)
>   		err |= comedi_check_trigger_arg_min(&cmd->stop_arg, 1);
> 

The actual patch looks good.  A 'Cc:' line for "stable" kernel versions 
4.4 and later could be added:

Cc: <stable@vger.kernel.org> # 4.4+

Please mark the updated patch as '[PATCH v2]' in the subject.  Thanks.

-- 
-=( Ian Abbott <abbotti@mev.co.uk> || Web: www.mev.co.uk )=-
-=( MEV Ltd. is a company registered in England & Wales. )=-
-=( Registered number: 02862268.  Registered address:    )=-
-=( 15 West Park Road, Bramhall, STOCKPORT, SK7 3JZ, UK. )=-
_______________________________________________
devel mailing list
devel@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel

      reply	other threads:[~2019-11-18 18:04 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-11-18 17:21 [PATCH] staging: comedi: usbduxsigma: usbduxfast_ai_cmdtest rounding error Bernd Porr
2019-11-18 18:04 ` Ian Abbott [this message]

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=02cd939a-3d1a-01d8-c730-5d0a6881df2b@mev.co.uk \
    --to=abbotti@mev.co.uk \
    --cc=driverdev-devel@linuxdriverproject.org \
    --cc=gregkh@linuxfoundation.org \
    --cc=mail@berndporr.me.uk \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).