@@ -82,8 +82,9 @@ struct vdso_arch_data {
8282 __u32 syscall_map [SYSCALL_MAP_SIZE ]; /* Map of syscalls */
8383 __u32 compat_syscall_map [SYSCALL_MAP_SIZE ]; /* Map of compat syscalls */
8484
85- struct vdso_data data [CS_BASES ];
8685 struct vdso_rng_data rng_data ;
86+
87+ struct vdso_data data [CS_BASES ] __aligned (1 << CONFIG_PAGE_SHIFT );
8788};
8889
8990#else /* CONFIG_PPC64 */
@@ -95,8 +96,9 @@ struct vdso_arch_data {
9596 __u64 tb_ticks_per_sec ; /* Timebase tics / sec 0x38 */
9697 __u32 syscall_map [SYSCALL_MAP_SIZE ]; /* Map of syscalls */
9798 __u32 compat_syscall_map [0 ]; /* No compat syscalls on PPC32 */
98- struct vdso_data data [CS_BASES ];
9999 struct vdso_rng_data rng_data ;
100+
101+ struct vdso_data data [CS_BASES ] __aligned (1 << CONFIG_PAGE_SHIFT );
100102};
101103
102104#endif /* CONFIG_PPC64 */
@@ -105,29 +107,17 @@ extern struct vdso_arch_data *vdso_data;
105107
106108#else /* __ASSEMBLY__ */
107109
108- .macro get_datapage ptr
110+ .macro get_datapage ptr offset = 0
109111 bcl 20 , 31 , .+4
110112999 :
111113 mflr \ptr
112- addis \ptr , \ptr , (_vdso_datapage - 999b )@ha
113- addi \ptr , \ptr , (_vdso_datapage - 999b )@l
114+ addis \ptr , \ptr , (_vdso_datapage - 999b + \ offset )@ha
115+ addi \ptr , \ptr , (_vdso_datapage - 999b + \ offset )@l
114116.endm
115117
116118#include <asm/asm-offsets.h>
117119#include <asm/page.h>
118120
119- .macro get_realdatapage ptr scratch
120- get_datapage \ptr
121- #ifdef CONFIG_TIME_NS
122- lwz \scratch , VDSO_CLOCKMODE_OFFSET (\ptr )
123- xoris \scratch , \scratch , VDSO_CLOCKMODE_TIMENS @h
124- xori \scratch , \scratch , VDSO_CLOCKMODE_TIMENS @l
125- cntlzw \scratch , \scratch
126- rlwinm \scratch , \scratch , PAGE_SHIFT - 5 , 1 << PAGE_SHIFT
127- add \ptr , \ptr , \scratch
128- #endif
129- .endm
130-
131121#endif /* __ASSEMBLY__ */
132122
133123#endif /* __KERNEL__ */
0 commit comments