Merge branch 'fixes' of git://ftp.arm.linux.org.uk/~rmk/linux-arm
Pull ARM fixes from Russell King: "Another few small ARM fixes, mostly addressing some VDSO issues" * 'fixes' of git://ftp.arm.linux.org.uk/~rmk/linux-arm: ARM: 8410/1: VDSO: fix coarse clock monotonicity regression ARM: 8409/1: Mark ret_fast_syscall as a function ARM: 8408/1: Fix the secondary_startup function in Big Endian case ARM: 8405/1: VDSO: fix regression with toolchains lacking ld.bfd executable
This commit is contained in:
@ -61,6 +61,7 @@ work_pending:
|
|||||||
movlt scno, #(__NR_restart_syscall - __NR_SYSCALL_BASE)
|
movlt scno, #(__NR_restart_syscall - __NR_SYSCALL_BASE)
|
||||||
ldmia sp, {r0 - r6} @ have to reload r0 - r6
|
ldmia sp, {r0 - r6} @ have to reload r0 - r6
|
||||||
b local_restart @ ... and off we go
|
b local_restart @ ... and off we go
|
||||||
|
ENDPROC(ret_fast_syscall)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* "slow" syscall return path. "why" tells us if this was a real syscall.
|
* "slow" syscall return path. "why" tells us if this was a real syscall.
|
||||||
|
@ -399,6 +399,9 @@ ENTRY(secondary_startup)
|
|||||||
sub lr, r4, r5 @ mmu has been enabled
|
sub lr, r4, r5 @ mmu has been enabled
|
||||||
add r3, r7, lr
|
add r3, r7, lr
|
||||||
ldrd r4, [r3, #0] @ get secondary_data.pgdir
|
ldrd r4, [r3, #0] @ get secondary_data.pgdir
|
||||||
|
ARM_BE8(eor r4, r4, r5) @ Swap r5 and r4 in BE:
|
||||||
|
ARM_BE8(eor r5, r4, r5) @ it can be done in 3 steps
|
||||||
|
ARM_BE8(eor r4, r4, r5) @ without using a temp reg.
|
||||||
ldr r8, [r3, #8] @ get secondary_data.swapper_pg_dir
|
ldr r8, [r3, #8] @ get secondary_data.swapper_pg_dir
|
||||||
badr lr, __enable_mmu @ return address
|
badr lr, __enable_mmu @ return address
|
||||||
mov r13, r12 @ __secondary_switched address
|
mov r13, r12 @ __secondary_switched address
|
||||||
|
@ -296,7 +296,6 @@ static bool tk_is_cntvct(const struct timekeeper *tk)
|
|||||||
*/
|
*/
|
||||||
void update_vsyscall(struct timekeeper *tk)
|
void update_vsyscall(struct timekeeper *tk)
|
||||||
{
|
{
|
||||||
struct timespec xtime_coarse;
|
|
||||||
struct timespec64 *wtm = &tk->wall_to_monotonic;
|
struct timespec64 *wtm = &tk->wall_to_monotonic;
|
||||||
|
|
||||||
if (!cntvct_ok) {
|
if (!cntvct_ok) {
|
||||||
@ -308,10 +307,10 @@ void update_vsyscall(struct timekeeper *tk)
|
|||||||
|
|
||||||
vdso_write_begin(vdso_data);
|
vdso_write_begin(vdso_data);
|
||||||
|
|
||||||
xtime_coarse = __current_kernel_time();
|
|
||||||
vdso_data->tk_is_cntvct = tk_is_cntvct(tk);
|
vdso_data->tk_is_cntvct = tk_is_cntvct(tk);
|
||||||
vdso_data->xtime_coarse_sec = xtime_coarse.tv_sec;
|
vdso_data->xtime_coarse_sec = tk->xtime_sec;
|
||||||
vdso_data->xtime_coarse_nsec = xtime_coarse.tv_nsec;
|
vdso_data->xtime_coarse_nsec = (u32)(tk->tkr_mono.xtime_nsec >>
|
||||||
|
tk->tkr_mono.shift);
|
||||||
vdso_data->wtm_clock_sec = wtm->tv_sec;
|
vdso_data->wtm_clock_sec = wtm->tv_sec;
|
||||||
vdso_data->wtm_clock_nsec = wtm->tv_nsec;
|
vdso_data->wtm_clock_nsec = wtm->tv_nsec;
|
||||||
|
|
||||||
|
@ -14,7 +14,7 @@ VDSO_LDFLAGS += -Wl,-z,max-page-size=4096 -Wl,-z,common-page-size=4096
|
|||||||
VDSO_LDFLAGS += -nostdlib -shared
|
VDSO_LDFLAGS += -nostdlib -shared
|
||||||
VDSO_LDFLAGS += $(call cc-ldoption, -Wl$(comma)--hash-style=sysv)
|
VDSO_LDFLAGS += $(call cc-ldoption, -Wl$(comma)--hash-style=sysv)
|
||||||
VDSO_LDFLAGS += $(call cc-ldoption, -Wl$(comma)--build-id)
|
VDSO_LDFLAGS += $(call cc-ldoption, -Wl$(comma)--build-id)
|
||||||
VDSO_LDFLAGS += $(call cc-option, -fuse-ld=bfd)
|
VDSO_LDFLAGS += $(call cc-ldoption, -fuse-ld=bfd)
|
||||||
|
|
||||||
obj-$(CONFIG_VDSO) += vdso.o
|
obj-$(CONFIG_VDSO) += vdso.o
|
||||||
extra-$(CONFIG_VDSO) += vdso.lds
|
extra-$(CONFIG_VDSO) += vdso.lds
|
||||||
|
Reference in New Issue
Block a user