mail archive of the barebox mailing list
 help / color / mirror / Atom feed
* [PATCH 1/2] include: linux/math.h: promote DIV_ROUND_UP_ULL args to 64-bit
@ 2024-08-15  6:56 Ahmad Fatoum
  2024-08-15  6:56 ` [PATCH 2/2] i2c: efi: use DIV_ROUND_UP_ULL instead of native division Ahmad Fatoum
  2024-08-20 12:07 ` [PATCH 1/2] include: linux/math.h: promote DIV_ROUND_UP_ULL args to 64-bit Sascha Hauer
  0 siblings, 2 replies; 4+ messages in thread
From: Ahmad Fatoum @ 2024-08-15  6:56 UTC (permalink / raw)
  To: barebox; +Cc: Ahmad Fatoum

DIV_ROUND_DOWN_ULL promotes division arguments to 64-bit, but
DIV_ROUND_UP_ULL did so only for the division, not the addition for the
round up. This would lead to a wrong result when the 32-bit addition
wraps around.

Linux has an explicit cast to fix this, so do likewise in barebox.

Signed-off-by: Ahmad Fatoum <a.fatoum@pengutronix.de>
---
 include/linux/math.h | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/include/linux/math.h b/include/linux/math.h
index acbffa96e6eb..f5d5cc714c4e 100644
--- a/include/linux/math.h
+++ b/include/linux/math.h
@@ -23,7 +23,8 @@
 #define DIV_ROUND_DOWN_ULL(ll, d) \
 	({ unsigned long long _tmp = (ll); do_div(_tmp, d); _tmp; })
 
-#define DIV_ROUND_UP_ULL(ll, d)		DIV_ROUND_DOWN_ULL((ll) + (d) - 1, (d))
+#define DIV_ROUND_UP_ULL(ll, d) \
+	DIV_ROUND_DOWN_ULL((unsigned long long)(ll) + (d) - 1, (d))
 
 #define DIV_ROUND_CLOSEST(x, divisor)(			\
 {							\
-- 
2.39.2




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

* [PATCH 2/2] i2c: efi: use DIV_ROUND_UP_ULL instead of native division
  2024-08-15  6:56 [PATCH 1/2] include: linux/math.h: promote DIV_ROUND_UP_ULL args to 64-bit Ahmad Fatoum
@ 2024-08-15  6:56 ` Ahmad Fatoum
  2024-08-20  5:28   ` Tomas Marek
  2024-08-20 12:07 ` [PATCH 1/2] include: linux/math.h: promote DIV_ROUND_UP_ULL args to 64-bit Sascha Hauer
  1 sibling, 1 reply; 4+ messages in thread
From: Ahmad Fatoum @ 2024-08-15  6:56 UTC (permalink / raw)
  To: barebox; +Cc: Tomas Marek, Ahmad Fatoum

64-bit division on 32-bit platforms is normally handled by libgcc,
which, like the kernel, we don't link against in barebox.

Instead we have a number of division helpers that should be used for
64-bit division, which either expand to a normal division if possible or
to an out-of-line division. Make use of this to fix compilation for
32-bit.

Cc: Tomas Marek <tomas.marek@elrest.cz>
Signed-off-by: Ahmad Fatoum <a.fatoum@pengutronix.de>
---
This replaces "i2c: efi: avoid 64-bit division"
---
 drivers/i2c/busses/i2c-efi.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/i2c/busses/i2c-efi.c b/drivers/i2c/busses/i2c-efi.c
index 5f6cc0eed28e..4c58279e0398 100644
--- a/drivers/i2c/busses/i2c-efi.c
+++ b/drivers/i2c/busses/i2c-efi.c
@@ -114,7 +114,7 @@ static unsigned int efi_i2c_msg_op_cnt(const struct efi_i2c_priv *i2c_priv,
 
 	max_len = efi_i2c_max_len(i2c_priv, msg);
 
-	return ((u64)msg->len + max_len - 1) / max_len;
+	return DIV_ROUND_UP_ULL(msg->len, max_len);
 }
 
 static unsigned int efi_i2c_req_op_cnt(
-- 
2.39.2




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

* Re: [PATCH 2/2] i2c: efi: use DIV_ROUND_UP_ULL instead of native division
  2024-08-15  6:56 ` [PATCH 2/2] i2c: efi: use DIV_ROUND_UP_ULL instead of native division Ahmad Fatoum
@ 2024-08-20  5:28   ` Tomas Marek
  0 siblings, 0 replies; 4+ messages in thread
From: Tomas Marek @ 2024-08-20  5:28 UTC (permalink / raw)
  To: Ahmad Fatoum; +Cc: barebox

Hello Ahmad,

On Thu, Aug 15, 2024 at 08:56:46AM +0200, Ahmad Fatoum wrote:
> 64-bit division on 32-bit platforms is normally handled by libgcc,
> which, like the kernel, we don't link against in barebox.
> 
> Instead we have a number of division helpers that should be used for
> 64-bit division, which either expand to a normal division if possible or
> to an out-of-line division. Make use of this to fix compilation for
> 32-bit.

Thanks for hint.

> 
> Cc: Tomas Marek <tomas.marek@elrest.cz>
> Signed-off-by: Ahmad Fatoum <a.fatoum@pengutronix.de>
> ---
> This replaces "i2c: efi: avoid 64-bit division"
> ---
>  drivers/i2c/busses/i2c-efi.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/i2c/busses/i2c-efi.c b/drivers/i2c/busses/i2c-efi.c
> index 5f6cc0eed28e..4c58279e0398 100644
> --- a/drivers/i2c/busses/i2c-efi.c
> +++ b/drivers/i2c/busses/i2c-efi.c
> @@ -114,7 +114,7 @@ static unsigned int efi_i2c_msg_op_cnt(const struct efi_i2c_priv *i2c_priv,
>  
>  	max_len = efi_i2c_max_len(i2c_priv, msg);
>  
> -	return ((u64)msg->len + max_len - 1) / max_len;
> +	return DIV_ROUND_UP_ULL(msg->len, max_len);

It looks good to me.

Best regards

Tomas

>  }
>  
>  static unsigned int efi_i2c_req_op_cnt(
> -- 
> 2.39.2
> 



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

* Re: [PATCH 1/2] include: linux/math.h: promote DIV_ROUND_UP_ULL args to 64-bit
  2024-08-15  6:56 [PATCH 1/2] include: linux/math.h: promote DIV_ROUND_UP_ULL args to 64-bit Ahmad Fatoum
  2024-08-15  6:56 ` [PATCH 2/2] i2c: efi: use DIV_ROUND_UP_ULL instead of native division Ahmad Fatoum
@ 2024-08-20 12:07 ` Sascha Hauer
  1 sibling, 0 replies; 4+ messages in thread
From: Sascha Hauer @ 2024-08-20 12:07 UTC (permalink / raw)
  To: barebox, Ahmad Fatoum


On Thu, 15 Aug 2024 08:56:45 +0200, Ahmad Fatoum wrote:
> DIV_ROUND_DOWN_ULL promotes division arguments to 64-bit, but
> DIV_ROUND_UP_ULL did so only for the division, not the addition for the
> round up. This would lead to a wrong result when the 32-bit addition
> wraps around.
> 
> Linux has an explicit cast to fix this, so do likewise in barebox.
> 
> [...]

Applied, thanks!

[1/2] include: linux/math.h: promote DIV_ROUND_UP_ULL args to 64-bit
      https://git.pengutronix.de/cgit/barebox/commit/?id=6866796d1ce0 (link may not be stable)
[2/2] i2c: efi: use DIV_ROUND_UP_ULL instead of native division
      https://git.pengutronix.de/cgit/barebox/commit/?id=2c24ed8454a0 (link may not be stable)

Best regards,
-- 
Sascha Hauer <s.hauer@pengutronix.de>




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

end of thread, other threads:[~2024-08-20 12:08 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-08-15  6:56 [PATCH 1/2] include: linux/math.h: promote DIV_ROUND_UP_ULL args to 64-bit Ahmad Fatoum
2024-08-15  6:56 ` [PATCH 2/2] i2c: efi: use DIV_ROUND_UP_ULL instead of native division Ahmad Fatoum
2024-08-20  5:28   ` Tomas Marek
2024-08-20 12:07 ` [PATCH 1/2] include: linux/math.h: promote DIV_ROUND_UP_ULL args to 64-bit Sascha Hauer

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