mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-09 14:56:54 -04:00
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: Thomas Weißschuh <thomas.weissschuh@linutronix.de> Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Link: https://lore.kernel.org/all/20241010-vdso-generic-base-v1-15-b64f0842d512@linutronix.de
This commit is contained in:
committed by
Thomas Gleixner
parent
7175126a6d
commit
59b7761638
@@ -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
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user