Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d2312e33 authored by Stefani Seibold's avatar Stefani Seibold Committed by H. Peter Anvin
Browse files

x86, vdso: Make vsyscall_gtod_data handling x86 generic



This patch move the vsyscall_gtod_data handling out of vsyscall_64.c
into an additonal file vsyscall_gtod.c to make the functionality
available for x86 32 bit kernel.

It also adds a new vsyscall_32.c which setup the VVAR page.

Reviewed-by: default avatarAndy Lutomirski <luto@amacapital.net>
Signed-off-by: default avatarStefani Seibold <stefani@seibold.net>
Link: http://lkml.kernel.org/r/1395094933-14252-2-git-send-email-stefani@seibold.net


Signed-off-by: default avatarH. Peter Anvin <hpa@linux.intel.com>
parent 1f2cbcf6
Loading
Loading
Loading
Loading
+2 −2
Original line number Original line Diff line number Diff line
@@ -107,9 +107,9 @@ config X86
	select HAVE_ARCH_SOFT_DIRTY
	select HAVE_ARCH_SOFT_DIRTY
	select CLOCKSOURCE_WATCHDOG
	select CLOCKSOURCE_WATCHDOG
	select GENERIC_CLOCKEVENTS
	select GENERIC_CLOCKEVENTS
	select ARCH_CLOCKSOURCE_DATA if X86_64
	select ARCH_CLOCKSOURCE_DATA
	select GENERIC_CLOCKEVENTS_BROADCAST if X86_64 || (X86_32 && X86_LOCAL_APIC)
	select GENERIC_CLOCKEVENTS_BROADCAST if X86_64 || (X86_32 && X86_LOCAL_APIC)
	select GENERIC_TIME_VSYSCALL if X86_64
	select GENERIC_TIME_VSYSCALL
	select KTIME_SCALAR if X86_32
	select KTIME_SCALAR if X86_32
	select GENERIC_STRNCPY_FROM_USER
	select GENERIC_STRNCPY_FROM_USER
	select GENERIC_STRNLEN_USER
	select GENERIC_STRNLEN_USER
+0 −4
Original line number Original line Diff line number Diff line
@@ -3,8 +3,6 @@
#ifndef _ASM_X86_CLOCKSOURCE_H
#ifndef _ASM_X86_CLOCKSOURCE_H
#define _ASM_X86_CLOCKSOURCE_H
#define _ASM_X86_CLOCKSOURCE_H


#ifdef CONFIG_X86_64

#define VCLOCK_NONE 0  /* No vDSO clock available.	*/
#define VCLOCK_NONE 0  /* No vDSO clock available.	*/
#define VCLOCK_TSC  1  /* vDSO should use vread_tsc.	*/
#define VCLOCK_TSC  1  /* vDSO should use vread_tsc.	*/
#define VCLOCK_HPET 2  /* vDSO should use vread_hpet.	*/
#define VCLOCK_HPET 2  /* vDSO should use vread_hpet.	*/
@@ -14,6 +12,4 @@ struct arch_clocksource_data {
	int vclock_mode;
	int vclock_mode;
};
};


#endif /* CONFIG_X86_64 */

#endif /* _ASM_X86_CLOCKSOURCE_H */
#endif /* _ASM_X86_CLOCKSOURCE_H */
+9 −3
Original line number Original line Diff line number Diff line
@@ -16,9 +16,6 @@
 * you mess up, the linker will catch it.)
 * you mess up, the linker will catch it.)
 */
 */


/* Base address of vvars.  This is not ABI. */
#define VVAR_ADDRESS (-10*1024*1024 - 4096)

#if defined(__VVAR_KERNEL_LDS)
#if defined(__VVAR_KERNEL_LDS)


/* The kernel linker script defines its own magic to put vvars in the
/* The kernel linker script defines its own magic to put vvars in the
@@ -29,6 +26,15 @@


#else
#else


extern char __vvar_page;

/* Base address of vvars.  This is not ABI. */
#ifdef CONFIG_X86_64
#define VVAR_ADDRESS (-10*1024*1024 - 4096)
#else
#define VVAR_ADDRESS (&__vvar_page)
#endif

#define DECLARE_VVAR(offset, type, name)				\
#define DECLARE_VVAR(offset, type, name)				\
	static type const * const vvaraddr_ ## name =			\
	static type const * const vvaraddr_ ## name =			\
		(void *)(VVAR_ADDRESS + (offset));
		(void *)(VVAR_ADDRESS + (offset));
+1 −1
Original line number Original line Diff line number Diff line
@@ -26,7 +26,7 @@ obj-$(CONFIG_IRQ_WORK) += irq_work.o
obj-y			+= probe_roms.o
obj-y			+= probe_roms.o
obj-$(CONFIG_X86_32)	+= i386_ksyms_32.o
obj-$(CONFIG_X86_32)	+= i386_ksyms_32.o
obj-$(CONFIG_X86_64)	+= sys_x86_64.o x8664_ksyms_64.o
obj-$(CONFIG_X86_64)	+= sys_x86_64.o x8664_ksyms_64.o
obj-y			+= syscall_$(BITS).o
obj-y			+= syscall_$(BITS).o vsyscall_gtod.o
obj-$(CONFIG_X86_64)	+= vsyscall_64.o
obj-$(CONFIG_X86_64)	+= vsyscall_64.o
obj-$(CONFIG_X86_64)	+= vsyscall_emu_64.o
obj-$(CONFIG_X86_64)	+= vsyscall_emu_64.o
obj-$(CONFIG_SYSFS)	+= ksysfs.o
obj-$(CONFIG_SYSFS)	+= ksysfs.o
+0 −2
Original line number Original line Diff line number Diff line
@@ -752,9 +752,7 @@ static struct clocksource clocksource_hpet = {
	.mask		= HPET_MASK,
	.mask		= HPET_MASK,
	.flags		= CLOCK_SOURCE_IS_CONTINUOUS,
	.flags		= CLOCK_SOURCE_IS_CONTINUOUS,
	.resume		= hpet_resume_counter,
	.resume		= hpet_resume_counter,
#ifdef CONFIG_X86_64
	.archdata	= { .vclock_mode = VCLOCK_HPET },
	.archdata	= { .vclock_mode = VCLOCK_HPET },
#endif
};
};


static int hpet_clocksource_register(void)
static int hpet_clocksource_register(void)
Loading