diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2015-08-13 19:34:56 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2015-08-13 19:34:56 -0400 |
| commit | 7ddab73346a1277b90fd6a4d044bc948f9cc9ad8 (patch) | |
| tree | 7dd3c3fd47cfd5b1832112b51acb61a1628d8bd9 | |
| parent | cd88ec2317015f9ae94fa55149bc6f61e1a460e9 (diff) | |
| parent | 09edea4f8fdeb4e292b80d493296070f5ec64e6e (diff) | |
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
| -rw-r--r-- | arch/arm/kernel/entry-common.S | 1 | ||||
| -rw-r--r-- | arch/arm/kernel/head.S | 3 | ||||
| -rw-r--r-- | arch/arm/kernel/vdso.c | 7 | ||||
| -rw-r--r-- | arch/arm/vdso/Makefile | 2 |
4 files changed, 8 insertions, 5 deletions
diff --git a/arch/arm/kernel/entry-common.S b/arch/arm/kernel/entry-common.S index 92828a1dec80..b48dd4f37f80 100644 --- a/arch/arm/kernel/entry-common.S +++ b/arch/arm/kernel/entry-common.S | |||
| @@ -61,6 +61,7 @@ work_pending: | |||
| 61 | movlt scno, #(__NR_restart_syscall - __NR_SYSCALL_BASE) | 61 | movlt scno, #(__NR_restart_syscall - __NR_SYSCALL_BASE) |
| 62 | ldmia sp, {r0 - r6} @ have to reload r0 - r6 | 62 | ldmia sp, {r0 - r6} @ have to reload r0 - r6 |
| 63 | b local_restart @ ... and off we go | 63 | b local_restart @ ... and off we go |
| 64 | ENDPROC(ret_fast_syscall) | ||
| 64 | 65 | ||
| 65 | /* | 66 | /* |
| 66 | * "slow" syscall return path. "why" tells us if this was a real syscall. | 67 | * "slow" syscall return path. "why" tells us if this was a real syscall. |
diff --git a/arch/arm/kernel/head.S b/arch/arm/kernel/head.S index bd755d97e459..29e2991465cb 100644 --- a/arch/arm/kernel/head.S +++ b/arch/arm/kernel/head.S | |||
| @@ -399,6 +399,9 @@ ENTRY(secondary_startup) | |||
| 399 | sub lr, r4, r5 @ mmu has been enabled | 399 | sub lr, r4, r5 @ mmu has been enabled |
| 400 | add r3, r7, lr | 400 | add r3, r7, lr |
| 401 | ldrd r4, [r3, #0] @ get secondary_data.pgdir | 401 | ldrd r4, [r3, #0] @ get secondary_data.pgdir |
| 402 | ARM_BE8(eor r4, r4, r5) @ Swap r5 and r4 in BE: | ||
| 403 | ARM_BE8(eor r5, r4, r5) @ it can be done in 3 steps | ||
| 404 | ARM_BE8(eor r4, r4, r5) @ without using a temp reg. | ||
| 402 | ldr r8, [r3, #8] @ get secondary_data.swapper_pg_dir | 405 | ldr r8, [r3, #8] @ get secondary_data.swapper_pg_dir |
| 403 | badr lr, __enable_mmu @ return address | 406 | badr lr, __enable_mmu @ return address |
| 404 | mov r13, r12 @ __secondary_switched address | 407 | mov r13, r12 @ __secondary_switched address |
diff --git a/arch/arm/kernel/vdso.c b/arch/arm/kernel/vdso.c index efe17dd9b921..54a5aeab988d 100644 --- a/arch/arm/kernel/vdso.c +++ b/arch/arm/kernel/vdso.c | |||
| @@ -296,7 +296,6 @@ static bool tk_is_cntvct(const struct timekeeper *tk) | |||
| 296 | */ | 296 | */ |
| 297 | void update_vsyscall(struct timekeeper *tk) | 297 | void update_vsyscall(struct timekeeper *tk) |
| 298 | { | 298 | { |
| 299 | struct timespec xtime_coarse; | ||
| 300 | struct timespec64 *wtm = &tk->wall_to_monotonic; | 299 | struct timespec64 *wtm = &tk->wall_to_monotonic; |
| 301 | 300 | ||
| 302 | if (!cntvct_ok) { | 301 | if (!cntvct_ok) { |
| @@ -308,10 +307,10 @@ void update_vsyscall(struct timekeeper *tk) | |||
| 308 | 307 | ||
| 309 | vdso_write_begin(vdso_data); | 308 | vdso_write_begin(vdso_data); |
| 310 | 309 | ||
| 311 | xtime_coarse = __current_kernel_time(); | ||
| 312 | vdso_data->tk_is_cntvct = tk_is_cntvct(tk); | 310 | vdso_data->tk_is_cntvct = tk_is_cntvct(tk); |
| 313 | vdso_data->xtime_coarse_sec = xtime_coarse.tv_sec; | 311 | vdso_data->xtime_coarse_sec = tk->xtime_sec; |
| 314 | vdso_data->xtime_coarse_nsec = xtime_coarse.tv_nsec; | 312 | vdso_data->xtime_coarse_nsec = (u32)(tk->tkr_mono.xtime_nsec >> |
| 313 | tk->tkr_mono.shift); | ||
| 315 | vdso_data->wtm_clock_sec = wtm->tv_sec; | 314 | vdso_data->wtm_clock_sec = wtm->tv_sec; |
| 316 | vdso_data->wtm_clock_nsec = wtm->tv_nsec; | 315 | vdso_data->wtm_clock_nsec = wtm->tv_nsec; |
| 317 | 316 | ||
diff --git a/arch/arm/vdso/Makefile b/arch/arm/vdso/Makefile index 9d259d94e429..1160434eece0 100644 --- a/arch/arm/vdso/Makefile +++ b/arch/arm/vdso/Makefile | |||
| @@ -14,7 +14,7 @@ VDSO_LDFLAGS += -Wl,-z,max-page-size=4096 -Wl,-z,common-page-size=4096 | |||
| 14 | VDSO_LDFLAGS += -nostdlib -shared | 14 | VDSO_LDFLAGS += -nostdlib -shared |
| 15 | VDSO_LDFLAGS += $(call cc-ldoption, -Wl$(comma)--hash-style=sysv) | 15 | VDSO_LDFLAGS += $(call cc-ldoption, -Wl$(comma)--hash-style=sysv) |
| 16 | VDSO_LDFLAGS += $(call cc-ldoption, -Wl$(comma)--build-id) | 16 | VDSO_LDFLAGS += $(call cc-ldoption, -Wl$(comma)--build-id) |
| 17 | VDSO_LDFLAGS += $(call cc-option, -fuse-ld=bfd) | 17 | VDSO_LDFLAGS += $(call cc-ldoption, -fuse-ld=bfd) |
| 18 | 18 | ||
| 19 | obj-$(CONFIG_VDSO) += vdso.o | 19 | obj-$(CONFIG_VDSO) += vdso.o |
| 20 | extra-$(CONFIG_VDSO) += vdso.lds | 20 | extra-$(CONFIG_VDSO) += vdso.lds |
