Commit 59b77616 authored by Thomas Weißschuh's avatar Thomas Weißschuh Committed by Thomas Gleixner
Browse files

x86/vdso: Access timens vdso data without vvar.h



The vdso_data is at the start of the timens page.
Make use of this invariant to remove the usage of vvar.h.
This also matches the logic for the pvclock and hvclock pages.

Signed-off-by: default avatarThomas Weißschuh <thomas.weissschuh@linutronix.de>
Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
Link: https://lore.kernel.org/all/20241010-vdso-generic-base-v1-15-b64f0842d512@linutronix.de
parent 7175126a
Loading
Loading
Loading
Loading
+0 −6
Original line number Diff line number Diff line
@@ -28,12 +28,6 @@ SECTIONS
	hvclock_page = vvar_start + 2 * PAGE_SIZE;
	timens_page  = vvar_start + 3 * PAGE_SIZE;

#undef _ASM_X86_VVAR_H
	/* Place all vvars in timens too at the offsets in asm/vvar.h. */
#define EMIT_VVAR(name, offset) timens_ ## name = timens_page + offset;
#include <asm/vvar.h>
#undef EMIT_VVAR

	. = SIZEOF_HEADERS;

	.hash		: { *(.hash) }			:text
+1 −1
Original line number Diff line number Diff line
@@ -33,7 +33,7 @@ static __always_inline ssize_t getrandom_syscall(void *buffer, size_t len, unsig
static __always_inline const struct vdso_rng_data *__arch_get_vdso_rng_data(void)
{
	if (IS_ENABLED(CONFIG_TIME_NS) && __arch_get_vdso_data()->clock_mode == VDSO_CLOCKMODE_TIMENS)
		return (void *)&__vdso_rng_data + ((void *)&__timens_vdso_data - (void *)__arch_get_vdso_data());
		return (void *)&__vdso_rng_data + ((void *)&timens_page - (void *)__arch_get_vdso_data());
	return &__vdso_rng_data;
}

+4 −2
Original line number Diff line number Diff line
@@ -21,7 +21,9 @@
#include <clocksource/hyperv_timer.h>

#define __vdso_data (VVAR(_vdso_data))
#define __timens_vdso_data (TIMENS(_vdso_data))

extern struct vdso_data timens_page
	__attribute__((visibility("hidden")));

#define VDSO_HAS_TIME 1

@@ -61,7 +63,7 @@ extern struct ms_hyperv_tsc_page hvclock_page
static __always_inline
const struct vdso_data *__arch_get_timens_vdso_data(const struct vdso_data *vd)
{
	return __timens_vdso_data;
	return &timens_page;
}
#endif