mirror of
https://github.com/torvalds/linux.git
synced 2026-03-08 03:44:45 +01:00
vdso/gettimeofday: Force inlining of __cvdso_clock_getres_common()
With CONFIG_CC_OPTIMIZE_FOR_SIZE=y, GCC may decide not to inline __cvdso_clock_getres_common(). This introduces spurious internal function calls in the vDSO fastpath. Furthermore, with automatic stack variable initialization (CONFIG_INIT_STACK_ALL_ZERO or CONFIG_INIT_STACK_ALL_PATTERN) GCC can emit a call to memset() which is not valid in the vDSO. Mark __cvdso_clock_getres_common() as __always_inline to avoid both issues. Paradoxically the inlining even reduces the size of the code: $ ./scripts/bloat-o-meter arch/powerpc/kernel/vdso/vgettimeofday-32.o.before arch/powerpc/kernel/vdso/vgettimeofday-32.o.after add/remove: 0/1 grow/shrink: 1/1 up/down: 52/-148 (-96) Function old new delta __c_kernel_clock_getres_time64 92 144 +52 __c_kernel_clock_getres 136 132 -4 __cvdso_clock_getres_common 144 - -144 Total: Before=2788, After=2692, chg -3.44% With CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE=y the functions are always inlined and therefore the behaviour stays the same. See also the equivalent change for clock_gettime() in commitb91c8c42ff("lib/vdso: Force inlining of __cvdso_clock_gettime_common()"). Fixes:21bbfd7404("x86/vdso: Provide clock_getres_time64() for x86-32") Fixes:1149dcdfc9("ARM: VDSO: Provide clock_getres_time64()") Fixes:f10c2e72b5("arm64: vdso32: Provide clock_getres_time64()") Fixes:bec06cd6a1("MIPS: vdso: Provide getres_time64() for 32-bit ABIs") Fixes:759a1f9737("powerpc/vdso: Provide clock_getres_time64()") Reported-by: Sverdlin, Alexander <alexander.sverdlin@siemens.com> Suggested-by: Christophe Leroy (CS GROUP) <chleroy@kernel.org> Signed-off-by: Thomas Weißschuh <thomas.weissschuh@linutronix.de> Signed-off-by: Thomas Gleixner <tglx@kernel.org> Link: https://lore.kernel.org/lkml/230c749f-ebd6-4829-93ee-601d88000a45@kernel.org/ Link: https://patch.msgid.link/20260123-vdso-clock_getres-inline-v1-1-4d6203b90cd3@linutronix.de Closes: https://lore.kernel.org/lkml/f45316f65a46da638b3c6aa69effd8980e6677b9.camel@siemens.com/
This commit is contained in:
parent
bbef8e2c29
commit
546e9289c7
1 changed files with 1 additions and 1 deletions
|
|
@ -421,7 +421,7 @@ static __maybe_unused __kernel_old_time_t __cvdso_time(__kernel_old_time_t *time
|
|||
#endif /* VDSO_HAS_TIME */
|
||||
|
||||
#ifdef VDSO_HAS_CLOCK_GETRES
|
||||
static __maybe_unused
|
||||
static __always_inline
|
||||
bool __cvdso_clock_getres_common(const struct vdso_time_data *vd, clockid_t clock,
|
||||
struct __kernel_timespec *res)
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue