mirror of
https://github.com/raspberrypi/linux.git
synced 2026-01-04 10:21:00 +00:00
x86/vdso: Access rng vdso data without vvar.h
The vdso_rng_data is at a well-known offset in the vvar page. Make use of this invariant to remove the usage of vvar.h. 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-16-b64f0842d512@linutronix.de
This commit is contained in:
committed by
Thomas Gleixner
parent
59b7761638
commit
c3a190d425
@@ -24,6 +24,8 @@ SECTIONS
|
||||
#include <asm/vvar.h>
|
||||
#undef EMIT_VVAR
|
||||
|
||||
vdso_rng_data = vvar_page + __VDSO_RND_DATA_OFFSET;
|
||||
|
||||
pvclock_page = vvar_start + PAGE_SIZE;
|
||||
hvclock_page = vvar_start + 2 * PAGE_SIZE;
|
||||
timens_page = vvar_start + 3 * PAGE_SIZE;
|
||||
|
||||
@@ -8,7 +8,6 @@
|
||||
#ifndef __ASSEMBLY__
|
||||
|
||||
#include <asm/unistd.h>
|
||||
#include <asm/vvar.h>
|
||||
|
||||
/**
|
||||
* getrandom_syscall - Invoke the getrandom() syscall.
|
||||
@@ -28,13 +27,14 @@ static __always_inline ssize_t getrandom_syscall(void *buffer, size_t len, unsig
|
||||
return ret;
|
||||
}
|
||||
|
||||
#define __vdso_rng_data (VVAR(_vdso_rng_data))
|
||||
extern struct vdso_rng_data vdso_rng_data
|
||||
__attribute__((visibility("hidden")));
|
||||
|
||||
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_page - (void *)__arch_get_vdso_data());
|
||||
return &__vdso_rng_data;
|
||||
return (void *)&vdso_rng_data + ((void *)&timens_page - (void *)__arch_get_vdso_data());
|
||||
return &vdso_rng_data;
|
||||
}
|
||||
|
||||
#endif /* !__ASSEMBLY__ */
|
||||
|
||||
@@ -62,11 +62,6 @@ extern char __vvar_page;
|
||||
|
||||
DECLARE_VVAR(0, struct vdso_data, _vdso_data)
|
||||
|
||||
#if !defined(_SINGLE_DATA)
|
||||
#define _SINGLE_DATA
|
||||
DECLARE_VVAR_SINGLE(__VDSO_RND_DATA_OFFSET, struct vdso_rng_data, _vdso_rng_data)
|
||||
#endif
|
||||
|
||||
#undef DECLARE_VVAR
|
||||
#undef DECLARE_VVAR_SINGLE
|
||||
|
||||
|
||||
Reference in New Issue
Block a user