Messages in this thread Patch in this message | | | From | Sebastian Reichel <> | Subject | [PATCH v4 1/3] math.h: add DIV_ROUND_UP_NO_OVERFLOW | Date | Tue, 24 Oct 2023 18:18:15 +0200 |
| |
Add a new DIV_ROUND_UP helper, which cannot overflow when big numbers are being used.
Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com> --- include/linux/math.h | 11 +++++++++++ 1 file changed, 11 insertions(+)
diff --git a/include/linux/math.h b/include/linux/math.h index dd4152711de7..f80bfb375ab9 100644 --- a/include/linux/math.h +++ b/include/linux/math.h @@ -36,6 +36,17 @@ #define DIV_ROUND_UP __KERNEL_DIV_ROUND_UP +/** + * DIV_ROUND_UP_NO_OVERFLOW - divide two numbers and always round up + * @n: numerator / dividend + * @d: denominator / divisor + * + * This functions does the same as DIV_ROUND_UP, but internally uses a + * division and a modulo operation instead of math tricks. This way it + * avoids overflowing when handling big numbers. + */ +#define DIV_ROUND_UP_NO_OVERFLOW(n, d) (((n) / (d)) + !!((n) % (d))) + #define DIV_ROUND_DOWN_ULL(ll, d) \ ({ unsigned long long _tmp = (ll); do_div(_tmp, d); _tmp; }) -- 2.42.0
| |