Am Montag, den 17.02.2014, 01:27 -0800 schrieb H. Peter Anvin:
On 02/16/2014 11:42 PM, Stefani Seibold wrote:
I think for the first time it will be okay to kick out the
_ASM_X86_SPINLOCK_H hack and accept the C=1 warnings.
At next step it is necessary to make the whole BUILD_VDSO32 path in
vclock_gettime.c independent from the kernel headers, only uapi/ should
be included.
The use of cycle_t must be replaced with u64.
We need a own copy of __native_read_tsc(), __iter_div_u64_rem, smp_rmb()
and cpu_relax().
All of which are quite trivial.
For the non BUILD_VDSO32 path we must only move the #includes inside
this #ifndef BUILD_VDSO32
Sorry, didn't quite follow that.
The solution is quite simple: In case of a 32 bit VDSO for a 64 bit
kernel fake a 32 bit kernel configuration. Than everything is fine and
all kernel headers will compile without warnings or errors, also make
C=1 will give no complains.
The arch/x86/vdso/vdso32/vclock_gettime.c will now look like:
#define BUILD_VDSO32
#ifdef CONFIG_X86_64
/*
* in case of a 32 bit VDSO for a 64 bit kernel fake a 32 bit kernel
* configuration
*/
#undef CONFIG_64BIT
#undef CONFIG_X86_64
#undef CONFIG_ILLEGAL_POINTER_VALUE
#define CONFIG_X86_32 1
#define CONFIG_PAGE_OFFSET 0
#define CONFIG_ILLEGAL_POINTER_VALUE 0
#define BUILD_VDSO32_64
#endif
#include "../vclock_gettime.c"
and the following modifications for arch/x86/include/asm/vgtod.h:
#ifdef BUILD_VDSO32_64
typedef u64 gtod_long_t;
#else
typedef unsigned long gtod_long_t;
#endif
I tested it and i see no side effects. What do you think?