diff options
author | Dan Williams <dan.j.williams@intel.com> | 2007-02-16 16:16:32 -0500 |
---|---|---|
committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2007-02-17 10:04:29 -0500 |
commit | f80dff9da07d81da16e3b842118d47b9febf9c01 (patch) | |
tree | ea2da17c5af516c241b3ea3b4dd4fa47d9d86769 /arch | |
parent | 588ef7693574cfbcb228f48d5478c2b39a9b0c9f (diff) |
[ARM] 4185/2: entry: introduce get_irqnr_preamble and arch_ret_to_user
get_irqnr_preamble allows machines to take some action before entering the
get_irqnr_and_base loop. On iop we enable cp6 access.
arch_ret_to_user is added to the userspace return path to allow individual
architectures to take actions, like disabling coprocessor access, before
the final return to userspace.
Per Nicolas Pitre's note, there is no need to cp_wait on the return to user
as the latency to return is sufficient.
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/arm/kernel/entry-armv.S | 1 | ||||
-rw-r--r-- | arch/arm/kernel/entry-common.S | 7 |
2 files changed, 8 insertions, 0 deletions
diff --git a/arch/arm/kernel/entry-armv.S b/arch/arm/kernel/entry-armv.S index cc10a093a545..d645897652c2 100644 --- a/arch/arm/kernel/entry-armv.S +++ b/arch/arm/kernel/entry-armv.S | |||
@@ -27,6 +27,7 @@ | |||
27 | * Interrupt handling. Preserves r7, r8, r9 | 27 | * Interrupt handling. Preserves r7, r8, r9 |
28 | */ | 28 | */ |
29 | .macro irq_handler | 29 | .macro irq_handler |
30 | get_irqnr_preamble r5, lr | ||
30 | 1: get_irqnr_and_base r0, r6, r5, lr | 31 | 1: get_irqnr_and_base r0, r6, r5, lr |
31 | movne r1, sp | 32 | movne r1, sp |
32 | @ | 33 | @ |
diff --git a/arch/arm/kernel/entry-common.S b/arch/arm/kernel/entry-common.S index 6f5e7c50d42f..c589dc3ecd1a 100644 --- a/arch/arm/kernel/entry-common.S +++ b/arch/arm/kernel/entry-common.S | |||
@@ -9,6 +9,7 @@ | |||
9 | */ | 9 | */ |
10 | 10 | ||
11 | #include <asm/unistd.h> | 11 | #include <asm/unistd.h> |
12 | #include <asm/arch/entry-macro.S> | ||
12 | 13 | ||
13 | #include "entry-header.S" | 14 | #include "entry-header.S" |
14 | 15 | ||
@@ -25,6 +26,9 @@ ret_fast_syscall: | |||
25 | tst r1, #_TIF_WORK_MASK | 26 | tst r1, #_TIF_WORK_MASK |
26 | bne fast_work_pending | 27 | bne fast_work_pending |
27 | 28 | ||
29 | /* perform architecture specific actions before user return */ | ||
30 | arch_ret_to_user r1, lr | ||
31 | |||
28 | @ fast_restore_user_regs | 32 | @ fast_restore_user_regs |
29 | ldr r1, [sp, #S_OFF + S_PSR] @ get calling cpsr | 33 | ldr r1, [sp, #S_OFF + S_PSR] @ get calling cpsr |
30 | ldr lr, [sp, #S_OFF + S_PC]! @ get pc | 34 | ldr lr, [sp, #S_OFF + S_PC]! @ get pc |
@@ -61,6 +65,9 @@ ret_slow_syscall: | |||
61 | tst r1, #_TIF_WORK_MASK | 65 | tst r1, #_TIF_WORK_MASK |
62 | bne work_pending | 66 | bne work_pending |
63 | no_work_pending: | 67 | no_work_pending: |
68 | /* perform architecture specific actions before user return */ | ||
69 | arch_ret_to_user r1, lr | ||
70 | |||
64 | @ slow_restore_user_regs | 71 | @ slow_restore_user_regs |
65 | ldr r1, [sp, #S_PSR] @ get calling cpsr | 72 | ldr r1, [sp, #S_PSR] @ get calling cpsr |
66 | ldr lr, [sp, #S_PC]! @ get pc | 73 | ldr lr, [sp, #S_PC]! @ get pc |