diff options
author | Russell King <rmk+kernel@arm.linux.org.uk> | 2011-06-26 05:22:08 -0400 |
---|---|---|
committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2011-06-29 05:03:02 -0400 |
commit | ac8b9c1ce094d43372d0259de08045ffee745a41 (patch) | |
tree | c4c8bc80090656f73f59f3a3553a96cfca49781f | |
parent | 2342aa282b59f028cf0850b483b34587db2c22b0 (diff) |
ARM: entry: prefetch/data abort helpers: convert to macros
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
-rw-r--r-- | arch/arm/kernel/entry-armv.S | 85 |
1 files changed, 35 insertions, 50 deletions
diff --git a/arch/arm/kernel/entry-armv.S b/arch/arm/kernel/entry-armv.S index 90c62cd51ca9..dbe9eb88d550 100644 --- a/arch/arm/kernel/entry-armv.S +++ b/arch/arm/kernel/entry-armv.S | |||
@@ -44,6 +44,37 @@ | |||
44 | 9997: | 44 | 9997: |
45 | .endm | 45 | .endm |
46 | 46 | ||
47 | .macro pabt_helper | ||
48 | mov r0, r2 @ pass address of aborted instruction. | ||
49 | #ifdef MULTI_PABORT | ||
50 | ldr r4, .LCprocfns | ||
51 | mov lr, pc | ||
52 | ldr pc, [r4, #PROCESSOR_PABT_FUNC] | ||
53 | #else | ||
54 | bl CPU_PABORT_HANDLER | ||
55 | #endif | ||
56 | .endm | ||
57 | |||
58 | .macro dabt_helper | ||
59 | |||
60 | @ | ||
61 | @ Call the processor-specific abort handler: | ||
62 | @ | ||
63 | @ r2 - aborted context pc | ||
64 | @ r3 - aborted context cpsr | ||
65 | @ | ||
66 | @ The abort handler must return the aborted address in r0, and | ||
67 | @ the fault status register in r1. r9 must be preserved. | ||
68 | @ | ||
69 | #ifdef MULTI_DABORT | ||
70 | ldr r4, .LCprocfns | ||
71 | mov lr, pc | ||
72 | ldr pc, [r4, #PROCESSOR_DABT_FUNC] | ||
73 | #else | ||
74 | bl CPU_DABORT_HANDLER | ||
75 | #endif | ||
76 | .endm | ||
77 | |||
47 | #ifdef CONFIG_KPROBES | 78 | #ifdef CONFIG_KPROBES |
48 | .section .kprobes.text,"ax",%progbits | 79 | .section .kprobes.text,"ax",%progbits |
49 | #else | 80 | #else |
@@ -159,22 +190,7 @@ __dabt_svc: | |||
159 | tst r3, #PSR_I_BIT | 190 | tst r3, #PSR_I_BIT |
160 | biceq r9, r9, #PSR_I_BIT | 191 | biceq r9, r9, #PSR_I_BIT |
161 | 192 | ||
162 | @ | 193 | dabt_helper |
163 | @ Call the processor-specific abort handler: | ||
164 | @ | ||
165 | @ r2 - aborted context pc | ||
166 | @ r3 - aborted context cpsr | ||
167 | @ | ||
168 | @ The abort handler must return the aborted address in r0, and | ||
169 | @ the fault status register in r1. r9 must be preserved. | ||
170 | @ | ||
171 | #ifdef MULTI_DABORT | ||
172 | ldr r4, .LCprocfns | ||
173 | mov lr, pc | ||
174 | ldr pc, [r4, #PROCESSOR_DABT_FUNC] | ||
175 | #else | ||
176 | bl CPU_DABORT_HANDLER | ||
177 | #endif | ||
178 | 194 | ||
179 | @ | 195 | @ |
180 | @ set desired IRQ state, then call main handler | 196 | @ set desired IRQ state, then call main handler |
@@ -298,14 +314,7 @@ __pabt_svc: | |||
298 | tst r3, #PSR_I_BIT | 314 | tst r3, #PSR_I_BIT |
299 | biceq r9, r9, #PSR_I_BIT | 315 | biceq r9, r9, #PSR_I_BIT |
300 | 316 | ||
301 | mov r0, r2 @ pass address of aborted instruction. | 317 | pabt_helper |
302 | #ifdef MULTI_PABORT | ||
303 | ldr r4, .LCprocfns | ||
304 | mov lr, pc | ||
305 | ldr pc, [r4, #PROCESSOR_PABT_FUNC] | ||
306 | #else | ||
307 | bl CPU_PABORT_HANDLER | ||
308 | #endif | ||
309 | debug_entry r1 | 318 | debug_entry r1 |
310 | msr cpsr_c, r9 @ Maybe enable interrupts | 319 | msr cpsr_c, r9 @ Maybe enable interrupts |
311 | mov r2, sp @ regs | 320 | mov r2, sp @ regs |
@@ -401,23 +410,7 @@ ENDPROC(__pabt_svc) | |||
401 | __dabt_usr: | 410 | __dabt_usr: |
402 | usr_entry | 411 | usr_entry |
403 | kuser_cmpxchg_check | 412 | kuser_cmpxchg_check |
404 | 413 | dabt_helper | |
405 | @ | ||
406 | @ Call the processor-specific abort handler: | ||
407 | @ | ||
408 | @ r2 - aborted context pc | ||
409 | @ r3 - aborted context cpsr | ||
410 | @ | ||
411 | @ The abort handler must return the aborted address in r0, and | ||
412 | @ the fault status register in r1. | ||
413 | @ | ||
414 | #ifdef MULTI_DABORT | ||
415 | ldr r4, .LCprocfns | ||
416 | mov lr, pc | ||
417 | ldr pc, [r4, #PROCESSOR_DABT_FUNC] | ||
418 | #else | ||
419 | bl CPU_DABORT_HANDLER | ||
420 | #endif | ||
421 | 414 | ||
422 | @ | 415 | @ |
423 | @ IRQs on, then call the main handler | 416 | @ IRQs on, then call the main handler |
@@ -682,15 +675,7 @@ ENDPROC(__und_usr_unknown) | |||
682 | .align 5 | 675 | .align 5 |
683 | __pabt_usr: | 676 | __pabt_usr: |
684 | usr_entry | 677 | usr_entry |
685 | 678 | pabt_helper | |
686 | mov r0, r2 @ pass address of aborted instruction. | ||
687 | #ifdef MULTI_PABORT | ||
688 | ldr r4, .LCprocfns | ||
689 | mov lr, pc | ||
690 | ldr pc, [r4, #PROCESSOR_PABT_FUNC] | ||
691 | #else | ||
692 | bl CPU_PABORT_HANDLER | ||
693 | #endif | ||
694 | debug_entry r1 | 679 | debug_entry r1 |
695 | enable_irq @ Enable interrupts | 680 | enable_irq @ Enable interrupts |
696 | mov r2, sp @ regs | 681 | mov r2, sp @ regs |