Linux IIO development
 help / color / mirror / Atom feed
* [RESEND PATCH v2] iio: gts-helper: Fix division loop
@ 2024-02-12 11:20 Matti Vaittinen
  2024-02-16 13:58 ` Jonathan Cameron
  0 siblings, 1 reply; 9+ messages in thread
From: Matti Vaittinen @ 2024-02-12 11:20 UTC (permalink / raw)
  To: Matti Vaittinen, Matti Vaittinen
  Cc: Jonathan Cameron, Lars-Peter Clausen, Matti Vaittinen,
	linux-kernel, David Laight, Subhajit Ghosh, linux-iio

[-- Attachment #1: Type: text/plain, Size: 2212 bytes --]

The loop based 64bit division may run for a long time when dividend is a
lot bigger than the divider. Replace the division loop by the
div64_u64() which implementation may be significantly faster.

Signed-off-by: Matti Vaittinen <mazziesaccount@gmail.com>
Fixes: 38416c28e168 ("iio: light: Add gain-time-scale helpers")

---
This is a resend. Only change is the base which is now the v6.8-rc4 and
not the v6.8-rc1

This change was earlier applied and reverted as it confusingly lacked of
the removal of the overflow check (which is only needed when we do
looping "while (full > scale * (u64)tmp)". As this loop got removed, the
check got also obsolete and leaving it to the code caused some
confusion.

So, I marked this as a v2, where v1 is the reverted change discussed
here:
https://lore.kernel.org/linux-iio/ZZZ7pJBGkTdFFqiY@dc78bmyyyyyyyyyyyyydt-3.rev.dnainternet.fi/

Revision history:
v1 => v2:
 - Drop the obsolete overflow check
 - Rebased on top of the v6.8-rc4

iio: gts: loop fix fix
---
 drivers/iio/industrialio-gts-helper.c | 15 +--------------
 1 file changed, 1 insertion(+), 14 deletions(-)

diff --git a/drivers/iio/industrialio-gts-helper.c b/drivers/iio/industrialio-gts-helper.c
index 7653261d2dc2..b51eb6cb766f 100644
--- a/drivers/iio/industrialio-gts-helper.c
+++ b/drivers/iio/industrialio-gts-helper.c
@@ -34,24 +34,11 @@
 static int iio_gts_get_gain(const u64 max, const u64 scale)
 {
 	u64 full = max;
-	int tmp = 1;
 
 	if (scale > full || !scale)
 		return -EINVAL;
 
-	if (U64_MAX - full < scale) {
-		/* Risk of overflow */
-		if (full - scale < scale)
-			return 1;
-
-		full -= scale;
-		tmp++;
-	}
-
-	while (full > scale * (u64)tmp)
-		tmp++;
-
-	return tmp;
+	return div64_u64(full, scale);
 }
 
 /**

base-commit: 841c35169323cd833294798e58b9bf63fa4fa1de
-- 
2.43.0


-- 
Matti Vaittinen, Linux device drivers
ROHM Semiconductors, Finland SWDC
Kiviharjunlenkki 1E
90220 OULU
FINLAND

~~~ "I don't think so," said Rene Descartes. Just then he vanished ~~~
Simon says - in Latin please.
~~~ "non cogito me" dixit Rene Descarte, deinde evanescavit ~~~
Thanks to Simon Glass for the translation =] 

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

^ permalink raw reply related	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2024-02-24  0:11 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-02-12 11:20 [RESEND PATCH v2] iio: gts-helper: Fix division loop Matti Vaittinen
2024-02-16 13:58 ` Jonathan Cameron
2024-02-17 14:39   ` Subhajit Ghosh
2024-02-17 16:27     ` Jonathan Cameron
2024-02-18  5:26       ` Subhajit Ghosh
2024-02-19  7:22         ` Matti Vaittinen
2024-02-19 19:32           ` Jonathan Cameron
2024-02-24  0:11             ` Subhajit Ghosh
2024-02-19  7:18   ` Matti Vaittinen

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox