mirror of https://gitee.com/openkylin/linux.git
ARM: entry: prefetch abort: tail-call the main prefetch abort handler
Tail-call the main C prefetch abort handler code from the per-CPU helper code. Also note that the helper function becomes ABI compliant in terms of the registers preserved. Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
This commit is contained in:
parent
d9600c99c5
commit
8dfe7ac96f
|
@ -45,7 +45,7 @@
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
.macro pabt_helper
|
.macro pabt_helper
|
||||||
@ PABORT handler takes fault address in r4
|
@ PABORT handler takes pt_regs in r2, fault address in r4 and psr in r5
|
||||||
#ifdef MULTI_PABORT
|
#ifdef MULTI_PABORT
|
||||||
ldr ip, .LCprocfns
|
ldr ip, .LCprocfns
|
||||||
mov lr, pc
|
mov lr, pc
|
||||||
|
@ -306,9 +306,8 @@ ENDPROC(__und_svc)
|
||||||
.align 5
|
.align 5
|
||||||
__pabt_svc:
|
__pabt_svc:
|
||||||
svc_entry
|
svc_entry
|
||||||
pabt_helper
|
|
||||||
mov r2, sp @ regs
|
mov r2, sp @ regs
|
||||||
bl do_PrefetchAbort @ call abort handler
|
pabt_helper
|
||||||
|
|
||||||
@
|
@
|
||||||
@ IRQs off again before pulling preserved data off the stack
|
@ IRQs off again before pulling preserved data off the stack
|
||||||
|
@ -653,9 +652,8 @@ ENDPROC(__und_usr_unknown)
|
||||||
.align 5
|
.align 5
|
||||||
__pabt_usr:
|
__pabt_usr:
|
||||||
usr_entry
|
usr_entry
|
||||||
pabt_helper
|
|
||||||
mov r2, sp @ regs
|
mov r2, sp @ regs
|
||||||
bl do_PrefetchAbort @ call abort handler
|
pabt_helper
|
||||||
UNWIND(.fnend )
|
UNWIND(.fnend )
|
||||||
/* fall through */
|
/* fall through */
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -4,10 +4,11 @@
|
||||||
/*
|
/*
|
||||||
* Function: legacy_pabort
|
* Function: legacy_pabort
|
||||||
*
|
*
|
||||||
* Params : r4 = address of aborted instruction
|
* Params : r2 = pt_regs
|
||||||
|
* : r4 = address of aborted instruction
|
||||||
|
* : r5 = psr for parent context
|
||||||
*
|
*
|
||||||
* Returns : r0 = address of abort
|
* Returns : r4 - r11, r13 preserved
|
||||||
* : r1 = Simulated IFSR with section translation fault status
|
|
||||||
*
|
*
|
||||||
* Purpose : obtain information about current prefetch abort.
|
* Purpose : obtain information about current prefetch abort.
|
||||||
*/
|
*/
|
||||||
|
@ -16,5 +17,5 @@
|
||||||
ENTRY(legacy_pabort)
|
ENTRY(legacy_pabort)
|
||||||
mov r0, r4
|
mov r0, r4
|
||||||
mov r1, #5
|
mov r1, #5
|
||||||
mov pc, lr
|
b do_PrefetchAbort
|
||||||
ENDPROC(legacy_pabort)
|
ENDPROC(legacy_pabort)
|
||||||
|
|
|
@ -4,10 +4,11 @@
|
||||||
/*
|
/*
|
||||||
* Function: v6_pabort
|
* Function: v6_pabort
|
||||||
*
|
*
|
||||||
* Params : r4 = address of aborted instruction
|
* Params : r2 = pt_regs
|
||||||
|
* : r4 = address of aborted instruction
|
||||||
|
* : r5 = psr for parent context
|
||||||
*
|
*
|
||||||
* Returns : r0 = address of abort
|
* Returns : r4 - r11, r13 preserved
|
||||||
* : r1 = IFSR
|
|
||||||
*
|
*
|
||||||
* Purpose : obtain information about current prefetch abort.
|
* Purpose : obtain information about current prefetch abort.
|
||||||
*/
|
*/
|
||||||
|
@ -16,5 +17,5 @@
|
||||||
ENTRY(v6_pabort)
|
ENTRY(v6_pabort)
|
||||||
mov r0, r4
|
mov r0, r4
|
||||||
mrc p15, 0, r1, c5, c0, 1 @ get IFSR
|
mrc p15, 0, r1, c5, c0, 1 @ get IFSR
|
||||||
mov pc, lr
|
b do_PrefetchAbort
|
||||||
ENDPROC(v6_pabort)
|
ENDPROC(v6_pabort)
|
||||||
|
|
|
@ -2,12 +2,13 @@
|
||||||
#include <asm/assembler.h>
|
#include <asm/assembler.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Function: v6_pabort
|
* Function: v7_pabort
|
||||||
*
|
*
|
||||||
* Params : r4 = address of aborted instruction
|
* Params : r2 = pt_regs
|
||||||
|
* : r4 = address of aborted instruction
|
||||||
|
* : r5 = psr for parent context
|
||||||
*
|
*
|
||||||
* Returns : r0 = address of abort
|
* Returns : r4 - r11, r13 preserved
|
||||||
* : r1 = IFSR
|
|
||||||
*
|
*
|
||||||
* Purpose : obtain information about current prefetch abort.
|
* Purpose : obtain information about current prefetch abort.
|
||||||
*/
|
*/
|
||||||
|
@ -16,5 +17,5 @@
|
||||||
ENTRY(v7_pabort)
|
ENTRY(v7_pabort)
|
||||||
mrc p15, 0, r0, c6, c0, 2 @ get IFAR
|
mrc p15, 0, r0, c6, c0, 2 @ get IFAR
|
||||||
mrc p15, 0, r1, c5, c0, 1 @ get IFSR
|
mrc p15, 0, r1, c5, c0, 1 @ get IFSR
|
||||||
mov pc, lr
|
b do_PrefetchAbort
|
||||||
ENDPROC(v7_pabort)
|
ENDPROC(v7_pabort)
|
||||||
|
|
Loading…
Reference in New Issue