diff options
Diffstat (limited to 'arch/arm/kernel/entry-armv.S')
| -rw-r--r-- | arch/arm/kernel/entry-armv.S | 21 |
1 files changed, 12 insertions, 9 deletions
diff --git a/arch/arm/kernel/entry-armv.S b/arch/arm/kernel/entry-armv.S index 7ea5f01dfc7b..de4e33137901 100644 --- a/arch/arm/kernel/entry-armv.S +++ b/arch/arm/kernel/entry-armv.S | |||
| @@ -634,6 +634,14 @@ ENTRY(__switch_to) | |||
| 634 | * purpose. | 634 | * purpose. |
| 635 | */ | 635 | */ |
| 636 | 636 | ||
| 637 | .macro usr_ret, reg | ||
| 638 | #ifdef CONFIG_ARM_THUMB | ||
| 639 | bx \reg | ||
| 640 | #else | ||
| 641 | mov pc, \reg | ||
| 642 | #endif | ||
| 643 | .endm | ||
| 644 | |||
| 637 | .align 5 | 645 | .align 5 |
| 638 | .globl __kuser_helper_start | 646 | .globl __kuser_helper_start |
| 639 | __kuser_helper_start: | 647 | __kuser_helper_start: |
| @@ -675,7 +683,7 @@ __kuser_memory_barrier: @ 0xffff0fa0 | |||
| 675 | #if __LINUX_ARM_ARCH__ >= 6 && defined(CONFIG_SMP) | 683 | #if __LINUX_ARM_ARCH__ >= 6 && defined(CONFIG_SMP) |
| 676 | mcr p15, 0, r0, c7, c10, 5 @ dmb | 684 | mcr p15, 0, r0, c7, c10, 5 @ dmb |
| 677 | #endif | 685 | #endif |
| 678 | mov pc, lr | 686 | usr_ret lr |
| 679 | 687 | ||
| 680 | .align 5 | 688 | .align 5 |
| 681 | 689 | ||
| @@ -778,7 +786,7 @@ __kuser_cmpxchg: @ 0xffff0fc0 | |||
| 778 | mov r0, #-1 | 786 | mov r0, #-1 |
| 779 | adds r0, r0, #0 | 787 | adds r0, r0, #0 |
| 780 | #endif | 788 | #endif |
| 781 | mov pc, lr | 789 | usr_ret lr |
| 782 | 790 | ||
| 783 | #else | 791 | #else |
| 784 | 792 | ||
| @@ -792,7 +800,7 @@ __kuser_cmpxchg: @ 0xffff0fc0 | |||
| 792 | #ifdef CONFIG_SMP | 800 | #ifdef CONFIG_SMP |
| 793 | mcr p15, 0, r0, c7, c10, 5 @ dmb | 801 | mcr p15, 0, r0, c7, c10, 5 @ dmb |
| 794 | #endif | 802 | #endif |
| 795 | mov pc, lr | 803 | usr_ret lr |
| 796 | 804 | ||
| 797 | #endif | 805 | #endif |
| 798 | 806 | ||
| @@ -834,16 +842,11 @@ __kuser_cmpxchg: @ 0xffff0fc0 | |||
| 834 | __kuser_get_tls: @ 0xffff0fe0 | 842 | __kuser_get_tls: @ 0xffff0fe0 |
| 835 | 843 | ||
| 836 | #if !defined(CONFIG_HAS_TLS_REG) && !defined(CONFIG_TLS_REG_EMUL) | 844 | #if !defined(CONFIG_HAS_TLS_REG) && !defined(CONFIG_TLS_REG_EMUL) |
| 837 | |||
| 838 | ldr r0, [pc, #(16 - 8)] @ TLS stored at 0xffff0ff0 | 845 | ldr r0, [pc, #(16 - 8)] @ TLS stored at 0xffff0ff0 |
| 839 | mov pc, lr | ||
| 840 | |||
| 841 | #else | 846 | #else |
| 842 | |||
| 843 | mrc p15, 0, r0, c13, c0, 3 @ read TLS register | 847 | mrc p15, 0, r0, c13, c0, 3 @ read TLS register |
| 844 | mov pc, lr | ||
| 845 | |||
| 846 | #endif | 848 | #endif |
| 849 | usr_ret lr | ||
| 847 | 850 | ||
| 848 | .rep 5 | 851 | .rep 5 |
| 849 | .word 0 @ pad up to __kuser_helper_version | 852 | .word 0 @ pad up to __kuser_helper_version |
