Commit ba9b5d76 authored by Nicolas Pitre's avatar Nicolas Pitre Committed by Russell King

[ARM] 3746/2: Userspace helpers must be Thumb mode interworkable

Patch from Nicolas Pitre

The userspace helpers in clean/arch/arm/kernel/entry-armv.S are called
directly in/from userspace. They need to cope with being called from
Thumb code.

Patch below uses the bx interworking instruction when
CONFIG_ARM_THUMB=y.

Based on an earlier patch from Paul Brook <paul@codesourcery.com>
Signed-off-by: default avatarNicolas Pitre <nico@cam.org>
Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
parent 90af774a
...@@ -634,6 +634,14 @@ ENTRY(__switch_to) ...@@ -634,6 +634,14 @@ ENTRY(__switch_to)
* purpose. * purpose.
*/ */
.macro usr_ret, reg
#ifdef CONFIG_ARM_THUMB
bx \reg
#else
mov pc, \reg
#endif
.endm
.align 5 .align 5
.globl __kuser_helper_start .globl __kuser_helper_start
__kuser_helper_start: __kuser_helper_start:
...@@ -675,7 +683,7 @@ __kuser_memory_barrier: @ 0xffff0fa0 ...@@ -675,7 +683,7 @@ __kuser_memory_barrier: @ 0xffff0fa0
#if __LINUX_ARM_ARCH__ >= 6 && defined(CONFIG_SMP) #if __LINUX_ARM_ARCH__ >= 6 && defined(CONFIG_SMP)
mcr p15, 0, r0, c7, c10, 5 @ dmb mcr p15, 0, r0, c7, c10, 5 @ dmb
#endif #endif
mov pc, lr usr_ret lr
.align 5 .align 5
...@@ -778,7 +786,7 @@ __kuser_cmpxchg: @ 0xffff0fc0 ...@@ -778,7 +786,7 @@ __kuser_cmpxchg: @ 0xffff0fc0
mov r0, #-1 mov r0, #-1
adds r0, r0, #0 adds r0, r0, #0
#endif #endif
mov pc, lr usr_ret lr
#else #else
...@@ -792,7 +800,7 @@ __kuser_cmpxchg: @ 0xffff0fc0 ...@@ -792,7 +800,7 @@ __kuser_cmpxchg: @ 0xffff0fc0
#ifdef CONFIG_SMP #ifdef CONFIG_SMP
mcr p15, 0, r0, c7, c10, 5 @ dmb mcr p15, 0, r0, c7, c10, 5 @ dmb
#endif #endif
mov pc, lr usr_ret lr
#endif #endif
...@@ -834,16 +842,11 @@ __kuser_cmpxchg: @ 0xffff0fc0 ...@@ -834,16 +842,11 @@ __kuser_cmpxchg: @ 0xffff0fc0
__kuser_get_tls: @ 0xffff0fe0 __kuser_get_tls: @ 0xffff0fe0
#if !defined(CONFIG_HAS_TLS_REG) && !defined(CONFIG_TLS_REG_EMUL) #if !defined(CONFIG_HAS_TLS_REG) && !defined(CONFIG_TLS_REG_EMUL)
ldr r0, [pc, #(16 - 8)] @ TLS stored at 0xffff0ff0 ldr r0, [pc, #(16 - 8)] @ TLS stored at 0xffff0ff0
mov pc, lr
#else #else
mrc p15, 0, r0, c13, c0, 3 @ read TLS register mrc p15, 0, r0, c13, c0, 3 @ read TLS register
mov pc, lr
#endif #endif
usr_ret lr
.rep 5 .rep 5
.word 0 @ pad up to __kuser_helper_version .word 0 @ pad up to __kuser_helper_version
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment