Commit 746647c7 authored by James Morse's avatar James Morse Committed by Will Deacon

arm64: entry.S convert el0_sync

el0_sync also unmasks exceptions on a case-by-case basis, debug exceptions
are enabled, unless this was a debug exception. Irqs are unmasked for
some exception types but not for others.

el0_dbg should run with everything masked to prevent us taking a debug
exception from do_debug_exception. For the other cases we can unmask
everything. This changes the behaviour of fpsimd_{acc,exc} and el0_inv
which previously ran with irqs masked.

This patch removed the last user of enable_dbg_and_irq, remove it.
Signed-off-by: default avatarJames Morse <james.morse@arm.com>
Reviewed-by: default avatarJulien Thierry <julien.thierry@arm.com>
Reviewed-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
Signed-off-by: default avatarWill Deacon <will.deacon@arm.com>
parent b55a5a1b
...@@ -97,15 +97,6 @@ ...@@ -97,15 +97,6 @@
9990: 9990:
.endm .endm
/*
* Enable both debug exceptions and interrupts. This is likely to be
* faster than two daifclr operations, since writes to this register
* are self-synchronising.
*/
.macro enable_dbg_and_irq
msr daifclr, #(8 | 2)
.endm
/* /*
* SMP data memory barrier * SMP data memory barrier
*/ */
......
...@@ -670,8 +670,7 @@ el0_da: ...@@ -670,8 +670,7 @@ el0_da:
* Data abort handling * Data abort handling
*/ */
mrs x26, far_el1 mrs x26, far_el1
// enable interrupts before calling the main handler enable_daif
enable_dbg_and_irq
ct_user_exit ct_user_exit
clear_address_tag x0, x26 clear_address_tag x0, x26
mov x1, x25 mov x1, x25
...@@ -683,8 +682,7 @@ el0_ia: ...@@ -683,8 +682,7 @@ el0_ia:
* Instruction abort handling * Instruction abort handling
*/ */
mrs x26, far_el1 mrs x26, far_el1
// enable interrupts before calling the main handler enable_daif
enable_dbg_and_irq
ct_user_exit ct_user_exit
mov x0, x26 mov x0, x26
mov x1, x25 mov x1, x25
...@@ -695,7 +693,7 @@ el0_fpsimd_acc: ...@@ -695,7 +693,7 @@ el0_fpsimd_acc:
/* /*
* Floating Point or Advanced SIMD access * Floating Point or Advanced SIMD access
*/ */
enable_dbg enable_daif
ct_user_exit ct_user_exit
mov x0, x25 mov x0, x25
mov x1, sp mov x1, sp
...@@ -705,7 +703,7 @@ el0_fpsimd_exc: ...@@ -705,7 +703,7 @@ el0_fpsimd_exc:
/* /*
* Floating Point or Advanced SIMD exception * Floating Point or Advanced SIMD exception
*/ */
enable_dbg enable_daif
ct_user_exit ct_user_exit
mov x0, x25 mov x0, x25
mov x1, sp mov x1, sp
...@@ -716,8 +714,7 @@ el0_sp_pc: ...@@ -716,8 +714,7 @@ el0_sp_pc:
* Stack or PC alignment exception handling * Stack or PC alignment exception handling
*/ */
mrs x26, far_el1 mrs x26, far_el1
// enable interrupts before calling the main handler enable_daif
enable_dbg_and_irq
ct_user_exit ct_user_exit
mov x0, x26 mov x0, x26
mov x1, x25 mov x1, x25
...@@ -728,8 +725,7 @@ el0_undef: ...@@ -728,8 +725,7 @@ el0_undef:
/* /*
* Undefined instruction * Undefined instruction
*/ */
// enable interrupts before calling the main handler enable_daif
enable_dbg_and_irq
ct_user_exit ct_user_exit
mov x0, sp mov x0, sp
bl do_undefinstr bl do_undefinstr
...@@ -738,7 +734,7 @@ el0_sys: ...@@ -738,7 +734,7 @@ el0_sys:
/* /*
* System instructions, for trapped cache maintenance instructions * System instructions, for trapped cache maintenance instructions
*/ */
enable_dbg_and_irq enable_daif
ct_user_exit ct_user_exit
mov x0, x25 mov x0, x25
mov x1, sp mov x1, sp
...@@ -753,11 +749,11 @@ el0_dbg: ...@@ -753,11 +749,11 @@ el0_dbg:
mov x1, x25 mov x1, x25
mov x2, sp mov x2, sp
bl do_debug_exception bl do_debug_exception
enable_dbg enable_daif
ct_user_exit ct_user_exit
b ret_to_user b ret_to_user
el0_inv: el0_inv:
enable_dbg enable_daif
ct_user_exit ct_user_exit
mov x0, sp mov x0, sp
mov x1, #BAD_SYNC mov x1, #BAD_SYNC
...@@ -836,7 +832,7 @@ el0_svc: ...@@ -836,7 +832,7 @@ el0_svc:
mov wsc_nr, #__NR_syscalls mov wsc_nr, #__NR_syscalls
el0_svc_naked: // compat entry point el0_svc_naked: // compat entry point
stp x0, xscno, [sp, #S_ORIG_X0] // save the original x0 and syscall number stp x0, xscno, [sp, #S_ORIG_X0] // save the original x0 and syscall number
enable_dbg_and_irq enable_daif
ct_user_exit 1 ct_user_exit 1
ldr x16, [tsk, #TSK_TI_FLAGS] // check for syscall hooks ldr x16, [tsk, #TSK_TI_FLAGS] // check for syscall hooks
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment