From: "Arnd Bergmann" <arnd@arndb.de>
To: "Thomas Weißschuh" <thomas.weissschuh@linutronix.de>
Cc: "Andy Lutomirski" <luto@kernel.org>,
"Thomas Gleixner" <tglx@linutronix.de>,
"Vincenzo Frascino" <vincenzo.frascino@arm.com>,
"David S . Miller" <davem@davemloft.net>,
"Andreas Larsson" <andreas@gaisler.com>,
"Nagarathnam Muthusamy" <nagarathnam.muthusamy@oracle.com>,
"Nick Alcock" <nick.alcock@oracle.com>,
"John Stultz" <jstultz@google.com>,
"Stephen Boyd" <sboyd@kernel.org>,
"John Paul Adrian Glaubitz" <glaubitz@physik.fu-berlin.de>,
linux-kernel@vger.kernel.org, sparclinux@vger.kernel.org
Subject: Re: [PATCH v2 12/13] sparc64: vdso: Implement clock_getres()
Date: Mon, 18 Aug 2025 08:54:53 +0200 [thread overview]
Message-ID: <dd77ac1f-9251-4ad2-ad5b-9d2b8969a476@app.fastmail.com> (raw)
In-Reply-To: <20250818073135-130dfc53-225c-48a3-b960-e982faa866bf@linutronix.de>
On Mon, Aug 18, 2025, at 07:50, Thomas Weißschuh wrote:
> On Fri, Aug 15, 2025 at 10:09:23PM +0200, Arnd Bergmann wrote:
>> On Fri, Aug 15, 2025, at 14:34, Thomas Weißschuh wrote:
>> > On Fri, Aug 15, 2025 at 02:13:46PM +0200, Arnd Bergmann wrote:
>> >> On Fri, Aug 15, 2025, at 12:41, Thomas Weißschuh wrote:
>
>> On 32-bit, we decided against adding a clock_getres_time64()
>> syscall when we added clock_gettime64() because of this.
>
> My assumption was that clock_getres_time64() wouldn't make sense in the
> first place, as no clock would have a resolution this big.
While the type conversion is trivial, the general approach has
been to use the new types consistently, so this would be an odd
place to make an exception and require an explicit conversion
from __kernel_old_timespec32 back to __kernel_timespec or the
libc timespec.
>> For time64 userspace, this means that glibc always calls
>> the system call instead of the vdso, and old time32
>> userspace wouldn't use the clock_getres() vdso because
>> there was no vdso implementation when it was compiled.
>
> Is this paragraph meant to be specific for SPARC? Glibc does use the
> clock_getres() vdso fastpath on time64 architectures. But on SPARC no
> application would ever use clock_getres() through the vdso today,
> as it doesn't exist yet.
The glibc code has a weird mixup of the time32 and time64
function names, but from what I can tell, it only ever sets
dl_vdso_clock_getres_time64 on 64-bit architectures, where it
gets set to the normal clock_getres vdso symbol. On 32-bit,
glibc always skips vdso_clock_getres_time64() since it
does not exist, and then it always calls clock_getres_time64()
through the syscall interface, unless it runs on pre-5.6
kernels that fall back to the time32 vdso or syscall.
From the kernel's perspective there is no such thing as a
'time64 architecture', all 32-bit architectures (except x32)
implement the time64 syscalls, most 32-bit architectures also
have the old syscalls, and all 64-bit architectures (plus x32)
only have the old syscalls.
glibc introduced a different view of the same thing, the
internal names on some 32-bit architectures (rv32, arc) get
redirected so they look more like x32. However, those
architectures don't use vdso.
> In any case, I have no strong opinions about this patch and am happy to drop it or support only SPARC64. Most likely nobody will bother to update glibc anyways.
Agreed, I think the only real concern is maintainability here, so
if you think it helps to have __vdso_clock_getres(), please keep
that for sparc64, but let's leave it out for 32-bit altogether.
Two related points:
- something we could add on all 32-bit architectures after
everything uses the generic vdso implementation is
vdso_gettimeofday_time64(), this can shave off a few cycles
because it avoids a division that may be expensive on some
architectures, making it marginally more useful than
vdso_clock_getres_time64().
- there is one catch on sparc64 in the way it defines
__kernel_old_timeval with a 32-bit __kernel_suseconds_t,
unlike all other 64-bit architectures. This is incompatible
with glibc's __timeval64 definition on sparc32, so there
would need to be a special case for sparc32 somewhere,
either in the kernel or in glibc.
Arnd
next prev parent reply other threads:[~2025-08-18 6:55 UTC|newest]
Thread overview: 40+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-08-15 10:41 [PATCH v2 00/13] sparc64: vdso: Switch to generic vDSO library Thomas Weißschuh
2025-08-15 10:41 ` [PATCH v2 01/13] vdso: Add struct __kernel_old_timeval forward declaration to gettime.h Thomas Weißschuh
2025-08-15 10:41 ` [PATCH v2 02/13] sparc64: vdso: Link with -z noexecstack Thomas Weißschuh
2025-08-15 10:41 ` [PATCH v2 03/13] sparc64: vdso: Remove obsolete "fake section table" reservation Thomas Weißschuh
2025-08-15 10:41 ` [PATCH v2 04/13] sparc64: vdso: Replace code patching with runtime conditional Thomas Weißschuh
2025-08-15 10:41 ` [PATCH v2 05/13] sparc64: vdso: Move hardware counter read into header Thomas Weißschuh
2025-08-15 10:41 ` [PATCH v2 06/13] sparc64: vdso: Move syscall fallbacks " Thomas Weißschuh
2025-08-15 10:41 ` [PATCH v2 07/13] sparc64: vdso: Introduce vdso/processor.h Thomas Weißschuh
2025-08-15 10:41 ` [PATCH v2 08/13] sparc64: vdso: Switch to the generic vDSO library Thomas Weißschuh
2025-08-25 15:55 ` Andreas Larsson
2025-08-26 5:56 ` Thomas Weißschuh
2025-08-28 15:38 ` Andreas Larsson
2025-08-29 10:02 ` Andreas Larsson
2025-08-29 10:37 ` Thomas Weißschuh
2025-08-29 10:40 ` John Paul Adrian Glaubitz
2025-08-29 10:52 ` Thomas Weißschuh
2025-08-29 15:24 ` John Paul Adrian Glaubitz
2025-09-01 15:17 ` Arnd Bergmann
2025-09-02 6:21 ` Thomas Weißschuh
2025-08-29 13:41 ` Andreas Larsson
2025-08-29 13:51 ` Thomas Weißschuh
2025-08-29 14:05 ` Thomas Weißschuh
2025-08-29 16:35 ` Andreas Larsson
2025-08-29 17:07 ` Thomas Weißschuh
2025-09-01 14:28 ` Andreas Larsson
2025-09-01 14:59 ` Thomas Weißschuh
2025-09-01 19:05 ` Andreas Larsson
2025-08-29 15:44 ` John Paul Adrian Glaubitz
2025-08-15 10:41 ` [PATCH v2 09/13] sparc64: vdso2c: Drop sym_vvar_start handling Thomas Weißschuh
2025-08-15 10:41 ` [PATCH v2 10/13] sparc64: vdso2c: Remove symbol handling Thomas Weißschuh
2025-08-15 10:41 ` [PATCH v2 11/13] sparc64: vdso: Implement clock_gettime64() Thomas Weißschuh
2025-08-15 10:41 ` [PATCH v2 12/13] sparc64: vdso: Implement clock_getres() Thomas Weißschuh
2025-08-15 12:13 ` Arnd Bergmann
2025-08-15 12:34 ` Thomas Weißschuh
2025-08-15 20:09 ` Arnd Bergmann
2025-08-18 5:50 ` Thomas Weißschuh
2025-08-18 6:54 ` Arnd Bergmann [this message]
2025-08-18 13:00 ` Thomas Weißschuh
2025-08-18 13:17 ` Arnd Bergmann
2025-08-15 10:41 ` [PATCH v2 13/13] clocksource: remove ARCH_CLOCKSOURCE_DATA Thomas Weißschuh
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=dd77ac1f-9251-4ad2-ad5b-9d2b8969a476@app.fastmail.com \
--to=arnd@arndb.de \
--cc=andreas@gaisler.com \
--cc=davem@davemloft.net \
--cc=glaubitz@physik.fu-berlin.de \
--cc=jstultz@google.com \
--cc=linux-kernel@vger.kernel.org \
--cc=luto@kernel.org \
--cc=nagarathnam.muthusamy@oracle.com \
--cc=nick.alcock@oracle.com \
--cc=sboyd@kernel.org \
--cc=sparclinux@vger.kernel.org \
--cc=tglx@linutronix.de \
--cc=thomas.weissschuh@linutronix.de \
--cc=vincenzo.frascino@arm.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;
as well as URLs for NNTP newsgroup(s).