* [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