Received: by 2002:a05:6a10:6006:0:0:0:0 with SMTP id w6csp1937701pxa; Sat, 29 Aug 2020 08:20:10 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxBuaEWoZnI3u0Yu7vYlNVfh3uILMiQw4CphJX4VPjscMyAhIkz3Vr/QvWcpOiMly/mSKvi X-Received: by 2002:a17:906:703:: with SMTP id y3mr3882964ejb.123.1598714410364; Sat, 29 Aug 2020 08:20:10 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1598714410; cv=none; d=google.com; s=arc-20160816; b=cJVZkgrkLrWccf3BO9wce1LmyFCvrv9PQPsCijA8kXwoqAFQj5x+mYnoDSqPWH+IdG 263iAe6YZRZCwFkXvdM5gWh310GSv2THtccId3Jpb3MroAI75E1wZwlXr2LfiYaYPQAC WVvS1WgDF9M5I9FiMByZSAP6T04eido1bhRoC3FXdqESb0W9NFZ0K/El19uFH5N1fopS GBE+duEWaHSWf9j8UHCUUoKLLc6MvSvAGyNSuE9sM8VQ/iC/EF6+OZpcXJWj5gUsLOG8 3lkmnPaj8A7e252YS6I4n4ApLnWcthRQHE821C/kLvq4HVlwUeLxDZ39GxiizuQ+lOcp lUKA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:subject:cc:to:from:date :dkim-signature; bh=6AtHPEvgj4rRqRU3cpUrg3NngACLZ/tZWzzgcqKhDDs=; b=IaOFWNqRfq6rxLJKKOwxFfUC1lEH2bKi3KI4hQf5zkM+F0zVvMlpUv4WeYNXt15bgx qxCw1NaPKrLOcGjUIIbhoONINFC+RbYkdEVdD8AI80LSpS+pUrTzNsq1KNPnkT1G01cv P79ILWPY/PHqRUzkQ1TY7Hz2yoWz0TLpIJK1RcVy66V+UWKoM8NQ/0dKNuFwqLc49ga4 GionnDIiSgDAOYic/37FgXLJDlOjJ8FnvRTMd6L24bopYKaD8FtdYWMX52yVnsRO/VUX 4f32ToPTaOOsPfWiYanNX2o9emRJmTkHwkzzyf7YvcJqdX7k4r0ZldlMZEMDVDz+iU2K RUBg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=MuV4H3U+; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id bs11si1774393edb.90.2020.08.29.08.19.45; Sat, 29 Aug 2020 08:20:10 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=MuV4H3U+; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728306AbgH2PTF (ORCPT + 99 others); Sat, 29 Aug 2020 11:19:05 -0400 Received: from mail.kernel.org ([198.145.29.99]:34026 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728146AbgH2PTF (ORCPT ); Sat, 29 Aug 2020 11:19:05 -0400 Received: from archlinux (cpc149474-cmbg20-2-0-cust94.5-4.cable.virginm.net [82.4.196.95]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id D4C9420707; Sat, 29 Aug 2020 15:19:02 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1598714344; bh=W2rbE6VHPAeW5y9cyufi3o4ecuRWRqU4vfDN60Cd1Eo=; h=Date:From:To:Cc:Subject:In-Reply-To:References:From; b=MuV4H3U+lnd2WVXNlFvCKb8DKDawjKxe9L6RwkYvW1ZUtj17fBsN8ccbZi9ZVG7d+ TRqJwFs7rPJdH61gDZ24LsLqoYsRwByiwurE4K4FoDt72iRKyQE2zIjabwyJYuKxFS N2NnYchYulNC6q6C8/MM0D6ygN9l+NcI9y204Xew= Date: Sat, 29 Aug 2020 16:19:00 +0100 From: Jonathan Cameron To: Anand Ashok Dumbre Cc: knaack.h@gmx.de, lars@metafoo.de, pmeerw@pmeerw.net, michal.simek@xilinx.com, git@xilinx.com, linux-iio@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, anandash@xilinx.com Subject: Re: [PATCH v2] iio: core: Fix IIO_VAL_FRACTIONAL calculation for negative values Message-ID: <20200829161900.713541cd@archlinux> In-Reply-To: <1598465676-28912-1-git-send-email-anand.ashok.dumbre@xilinx.com> References: <1598465676-28912-1-git-send-email-anand.ashok.dumbre@xilinx.com> X-Mailer: Claws Mail 3.17.6 (GTK+ 2.24.32; x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Wed, 26 Aug 2020 11:14:36 -0700 Anand Ashok Dumbre wrote: > Fixes IIO_VAL_FRACTIONAL for case when the result is negative and > exponent is 0. > > example: if the result is -0.75, tmp0 will be 0 and tmp1 = 75 > This causes the output to lose sign because of %d in snprintf > which works for tmp0 <= -1. > > Signed-off-by: Anand Ashok Dumbre Looks good. Just one last thing. Is this actually hit in an existing driver? I'm just wondering how far back we need to push it in stable etc. Thanks, Jonathan > --- > changes since v1: > Changed -%d to -0 to make the fix clearer. > Removed the email footer. > Updated the commit description with an example > -- > drivers/iio/industrialio-core.c | 8 ++++++-- > 1 file changed, 6 insertions(+), 2 deletions(-) > > diff --git a/drivers/iio/industrialio-core.c b/drivers/iio/industrialio-core.c > index cdcd16f1..a239fa2 100644 > --- a/drivers/iio/industrialio-core.c > +++ b/drivers/iio/industrialio-core.c > @@ -592,6 +592,7 @@ static ssize_t __iio_format_value(char *buf, size_t len, unsigned int type, > { > unsigned long long tmp; > int tmp0, tmp1; > + s64 tmp2; > bool scale_db = false; > > switch (type) { > @@ -614,10 +615,13 @@ static ssize_t __iio_format_value(char *buf, size_t len, unsigned int type, > else > return scnprintf(buf, len, "%d.%09u", vals[0], vals[1]); > case IIO_VAL_FRACTIONAL: > - tmp = div_s64((s64)vals[0] * 1000000000LL, vals[1]); > + tmp2 = div_s64((s64)vals[0] * 1000000000LL, vals[1]); > tmp1 = vals[1]; > tmp0 = (int)div_s64_rem(tmp, 1000000000, &tmp1); > - return scnprintf(buf, len, "%d.%09u", tmp0, abs(tmp1)); > + if ((tmp2 < 0) && (tmp0 == 0)) > + return snprintf(buf, len, "-0.%09u", abs(tmp1)); > + else > + return snprintf(buf, len, "%d.%09u", tmp0, abs(tmp1)); > case IIO_VAL_FRACTIONAL_LOG2: > tmp = shift_right((s64)vals[0] * 1000000000LL, vals[1]); > tmp0 = (int)div_s64_rem(tmp, 1000000000LL, &tmp1);