mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-02-13 13:03:15 -05:00
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/