diff options
author | Russell King <rmk+kernel@armlinux.org.uk> | 2017-03-24 16:23:25 +0000 |
---|---|---|
committer | Russell King <rmk+kernel@armlinux.org.uk> | 2017-08-02 14:15:04 +0100 |
commit | dca778c5bbf3f1cfcf7f6ef6cadf5a7e5c5d972f (patch) | |
tree | eeac8983b2a8c0d72ceb36ce1d941fece569d4ff | |
parent | fcea45236d3ffcd317296d75612eb163bf734407 (diff) | |
download | linux-dca778c5bbf3f1cfcf7f6ef6cadf5a7e5c5d972f.tar.gz linux-dca778c5bbf3f1cfcf7f6ef6cadf5a7e5c5d972f.tar.bz2 linux-dca778c5bbf3f1cfcf7f6ef6cadf5a7e5c5d972f.zip |
ARM: avoid saving and restoring registers unnecessarily
Avoid repeatedly saving and restoring registers around the calls to
trace_hardirqs_on() and context_tracking_user_exit(). With the
previous changes, we no longer need to preserve "lr" across these
calls, and if we re-load r0-r3 later, we can avoid preserving these
regsiters too.
Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
-rw-r--r-- | arch/arm/kernel/entry-common.S | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/arch/arm/kernel/entry-common.S b/arch/arm/kernel/entry-common.S index 1b3fc79d0e8b..0b60adf4a5d9 100644 --- a/arch/arm/kernel/entry-common.S +++ b/arch/arm/kernel/entry-common.S @@ -157,8 +157,9 @@ ENTRY(vector_swi) #endif zero_fp alignment_trap r10, ip, __cr_alignment - enable_irq - ct_user_exit + asm_trace_hardirqs_on save=0 + enable_irq_notrace + ct_user_exit save=0 /* * Get the system call number. @@ -216,6 +217,11 @@ ENTRY(vector_swi) eor scno, scno, #__NR_SYSCALL_BASE @ check OS number #endif get_thread_info tsk + /* + * Reload the registers that may have been corrupted on entry to + * the syscall assembly (by tracing or context tracking.) + */ + TRACE( ldmia sp, {r0 - r3} ) local_restart: ldr r10, [tsk, #TI_FLAGS] @ check for syscall tracing |