From: cem@kernel.org
To: linux-kernel@vger.kernel.org
Cc: Hans.Holmberg@wdc.com, oe-kbuild-all@lists.linux.dev, hch@lst.de,
lukas@wunner.de, angelogioacchino.delregno@collabora.com,
Jonathan.Cameron@huawei.com
Subject: [RFC PATCH] math.h: Account for 64-bit division on i386
Date: Sat, 19 Apr 2025 13:51:46 +0200 [thread overview]
Message-ID: <20250419115157.567249-1-cem@kernel.org> (raw)
From: Carlos Maiolino <cem@kernel.org>
Building linux on i386 might fail if a 64bit type is passed to
mult_fract(). To prevent the failure, use do_div() for the division
calculation instead of hardcoding a / b.
Signed-off-by: Carlos Maiolino <cmaiolino@redhat.com>
Reported-by: kernel test robot <lkp@intel.com>
Closes: https://lore.kernel.org/oe-kbuild-all/202504181233.F7D9Atra-lkp@intel.com/
---
I'm sending it as a RFC because I didn't to extensive testing on this
patch, also I'm not sure if mult_frac() was intended to work on 32-bit
only types. If that's the case, perhaps, a new mult_frac64() might be a
better idea?!
include/linux/math.h | 19 ++++++++++---------
1 file changed, 10 insertions(+), 9 deletions(-)
diff --git a/include/linux/math.h b/include/linux/math.h
index 0198c92cbe3e..05ea853b75b4 100644
--- a/include/linux/math.h
+++ b/include/linux/math.h
@@ -133,15 +133,16 @@ __STRUCT_FRACT(u32)
#undef __STRUCT_FRACT
/* Calculate "x * n / d" without unnecessary overflow or loss of precision. */
-#define mult_frac(x, n, d) \
-({ \
- typeof(x) x_ = (x); \
- typeof(n) n_ = (n); \
- typeof(d) d_ = (d); \
- \
- typeof(x_) q = x_ / d_; \
- typeof(x_) r = x_ % d_; \
- q * n_ + r * n_ / d_; \
+#define mult_frac(x, n, d) \
+({ \
+ typeof(x) x_ = (x); \
+ typeof(n) n_ = (n); \
+ typeof(d) d_ = (d); \
+ \
+ typeof(x_) r = do_div(x_, d_); \
+ r *= n_; \
+ do_div(r, d_); \
+ x_ * n_ + r; \
})
#define sector_div(a, b) do_div(a, b)
--
2.49.0
next reply other threads:[~2025-04-19 11:52 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-04-19 11:51 cem [this message]
2025-04-19 18:28 ` [RFC PATCH] math.h: Account for 64-bit division on i386 kernel test robot
2025-04-19 18:59 ` kernel test robot
2025-04-20 15:40 ` Guenter Roeck
2025-04-20 17:42 ` Guenter Roeck
2025-04-20 18:05 ` Carlos Maiolino
2025-04-23 7:02 ` Geert Uytterhoeven
2025-04-20 18:01 ` Carlos Maiolino
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20250419115157.567249-1-cem@kernel.org \
--to=cem@kernel.org \
--cc=Hans.Holmberg@wdc.com \
--cc=Jonathan.Cameron@huawei.com \
--cc=angelogioacchino.delregno@collabora.com \
--cc=hch@lst.de \
--cc=linux-kernel@vger.kernel.org \
--cc=lukas@wunner.de \
--cc=oe-kbuild-all@lists.linux.dev \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.