diff options
Diffstat (limited to 'arch/arm/kernel/entry-armv.S')
-rw-r--r-- | arch/arm/kernel/entry-armv.S | 30 |
1 files changed, 16 insertions, 14 deletions
diff --git a/arch/arm/kernel/entry-armv.S b/arch/arm/kernel/entry-armv.S index 080df907f242..e14278d59882 100644 --- a/arch/arm/kernel/entry-armv.S +++ b/arch/arm/kernel/entry-armv.S | |||
@@ -17,8 +17,8 @@ | |||
17 | 17 | ||
18 | #include <asm/glue.h> | 18 | #include <asm/glue.h> |
19 | #include <asm/vfpmacros.h> | 19 | #include <asm/vfpmacros.h> |
20 | #include <asm/hardware.h> @ should be moved into entry-macro.S | 20 | #include <asm/hardware.h> /* should be moved into entry-macro.S */ |
21 | #include <asm/arch/irqs.h> @ should be moved into entry-macro.S | 21 | #include <asm/arch/irqs.h> /* should be moved into entry-macro.S */ |
22 | #include <asm/arch/entry-macro.S> | 22 | #include <asm/arch/entry-macro.S> |
23 | 23 | ||
24 | #include "entry-header.S" | 24 | #include "entry-header.S" |
@@ -269,7 +269,7 @@ __pabt_svc: | |||
269 | add r5, sp, #S_PC | 269 | add r5, sp, #S_PC |
270 | ldmia r7, {r2 - r4} @ Get USR pc, cpsr | 270 | ldmia r7, {r2 - r4} @ Get USR pc, cpsr |
271 | 271 | ||
272 | #if __LINUX_ARM_ARCH__ < 6 | 272 | #if __LINUX_ARM_ARCH__ < 6 && !defined(CONFIG_NEEDS_SYSCALL_FOR_CMPXCHG) |
273 | @ make sure our user space atomic helper is aborted | 273 | @ make sure our user space atomic helper is aborted |
274 | cmp r2, #VIRT_OFFSET | 274 | cmp r2, #VIRT_OFFSET |
275 | bichs r3, r3, #PSR_Z_BIT | 275 | bichs r3, r3, #PSR_Z_BIT |
@@ -505,9 +505,9 @@ ENTRY(__switch_to) | |||
505 | mra r4, r5, acc0 | 505 | mra r4, r5, acc0 |
506 | stmia ip, {r4, r5} | 506 | stmia ip, {r4, r5} |
507 | #endif | 507 | #endif |
508 | #ifdef CONFIG_HAS_TLS_REG | 508 | #if defined(CONFIG_HAS_TLS_REG) |
509 | mcr p15, 0, r3, c13, c0, 3 @ set TLS register | 509 | mcr p15, 0, r3, c13, c0, 3 @ set TLS register |
510 | #else | 510 | #elif !defined(CONFIG_TLS_REG_EMUL) |
511 | mov r4, #0xffff0fff | 511 | mov r4, #0xffff0fff |
512 | str r3, [r4, #-15] @ TLS val at 0xffff0ff0 | 512 | str r3, [r4, #-15] @ TLS val at 0xffff0ff0 |
513 | #endif | 513 | #endif |
@@ -616,11 +616,17 @@ __kuser_helper_start: | |||
616 | 616 | ||
617 | __kuser_cmpxchg: @ 0xffff0fc0 | 617 | __kuser_cmpxchg: @ 0xffff0fc0 |
618 | 618 | ||
619 | #if __LINUX_ARM_ARCH__ < 6 | 619 | #if defined(CONFIG_NEEDS_SYSCALL_FOR_CMPXCHG) |
620 | 620 | ||
621 | #ifdef CONFIG_SMP /* sanity check */ | 621 | /* |
622 | #error "CONFIG_SMP on a machine supporting pre-ARMv6 processors?" | 622 | * Poor you. No fast solution possible... |
623 | #endif | 623 | * The kernel itself must perform the operation. |
624 | * A special ghost syscall is used for that (see traps.c). | ||
625 | */ | ||
626 | swi #0x9ffff0 | ||
627 | mov pc, lr | ||
628 | |||
629 | #elif __LINUX_ARM_ARCH__ < 6 | ||
624 | 630 | ||
625 | /* | 631 | /* |
626 | * Theory of operation: | 632 | * Theory of operation: |
@@ -690,11 +696,7 @@ __kuser_cmpxchg: @ 0xffff0fc0 | |||
690 | 696 | ||
691 | __kuser_get_tls: @ 0xffff0fe0 | 697 | __kuser_get_tls: @ 0xffff0fe0 |
692 | 698 | ||
693 | #ifndef CONFIG_HAS_TLS_REG | 699 | #if !defined(CONFIG_HAS_TLS_REG) && !defined(CONFIG_TLS_REG_EMUL) |
694 | |||
695 | #ifdef CONFIG_SMP /* sanity check */ | ||
696 | #error "CONFIG_SMP without CONFIG_HAS_TLS_REG is wrong" | ||
697 | #endif | ||
698 | 700 | ||
699 | ldr r0, [pc, #(16 - 8)] @ TLS stored at 0xffff0ff0 | 701 | ldr r0, [pc, #(16 - 8)] @ TLS stored at 0xffff0ff0 |
700 | mov pc, lr | 702 | mov pc, lr |