From: Zhan Xusheng <zhanxusheng1024@gmail.com>
To: thomas.weissschuh@linutronix.de
Cc: tglx@kernel.org, luto@kernel.org, vincenzo.frascino@arm.com,
david.laight.linux@gmail.com, zhanxusheng@xiaomi.com,
linux-kernel@vger.kernel.org
Subject: [PATCH v4 1/4] vdso/math64: Use OPTIMIZER_HIDE_VAR() in __iter_div_u64_rem()
Date: Wed, 2 Sep 2026 11:37:58 +0800 [thread overview]
Message-ID: <20260902033801.2912699-2-zhanxusheng@xiaomi.com> (raw)
In-Reply-To: <20260902033801.2912699-1-zhanxusheng@xiaomi.com>
The loop subtracts because the quotient is tiny at every caller, and the
asm() keeps the compiler from turning it into a division instead. It
offers a memory alternative for the value:
asm("" : "+rm"(dividend));
clang takes that alternative and spills the value inside the loop, on
64-bit as well as 32-bit. OPTIMIZER_HIDE_VAR() is the register-only form
of the same barrier and is what the rest of the kernel uses for this.
The helper sits on the clock_gettime() path through vdso_set_timespec(),
so this is measurable: x86 vDSO built with clang 18 loses 64 bytes of
vdso64 text and 112 bytes of vdso32. gcc 13 emits the same code either
way. Neither compiler turns the loop into a division with the new form,
checked at both widths.
Signed-off-by: Zhan Xusheng <zhanxusheng@xiaomi.com>
---
include/vdso/math64.h | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/include/vdso/math64.h b/include/vdso/math64.h
index 22ae212f8b28..83ebac2e5c1b 100644
--- a/include/vdso/math64.h
+++ b/include/vdso/math64.h
@@ -8,9 +8,11 @@ __iter_div_u64_rem(u64 dividend, u32 divisor, u64 *remainder)
u32 ret = 0;
while (dividend >= divisor) {
- /* The following asm() prevents the compiler from
- optimising this loop into a modulo operation. */
- asm("" : "+rm"(dividend));
+ /*
+ * Prevent the compiler from optimising this loop into a
+ * modulo operation.
+ */
+ OPTIMIZER_HIDE_VAR(dividend);
dividend -= divisor;
ret++;
--
2.43.0
next prev parent reply other threads:[~2026-09-02 3:39 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-02 3:37 [PATCH v4 0/4] vdso: Keep the CLOCK_AUX base at full precision Zhan Xusheng
2026-09-02 3:37 ` Zhan Xusheng [this message]
2026-09-05 20:43 ` [PATCH v4 1/4] vdso/math64: Use OPTIMIZER_HIDE_VAR() in __iter_div_u64_rem() Thomas Gleixner
2026-09-02 3:37 ` [PATCH v4 2/4] vdso/math64: Add and use __iter_div64_u64_rem() Zhan Xusheng
2026-09-02 10:43 ` Thomas Weißschuh
2026-09-05 20:49 ` Thomas Gleixner
2026-09-02 3:38 ` [PATCH v4 3/4] vdso/vsyscall: Keep the CLOCK_AUX base scaled Zhan Xusheng
2026-09-02 3:38 ` [PATCH v4 4/4] vdso/gettimeofday: Assert that the clock id fits the dispatch mask Zhan Xusheng
2026-09-05 20:48 ` Thomas Gleixner
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=20260902033801.2912699-2-zhanxusheng@xiaomi.com \
--to=zhanxusheng1024@gmail.com \
--cc=david.laight.linux@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=luto@kernel.org \
--cc=tglx@kernel.org \
--cc=thomas.weissschuh@linutronix.de \
--cc=vincenzo.frascino@arm.com \
--cc=zhanxusheng@xiaomi.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®