summaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorRussell King <rmk+kernel@armlinux.org.uk>2017-03-24 16:23:25 +0000
committerRussell King <rmk+kernel@armlinux.org.uk>2017-08-02 14:15:04 +0100
commitdca778c5bbf3f1cfcf7f6ef6cadf5a7e5c5d972f (patch)
treeeeac8983b2a8c0d72ceb36ce1d941fece569d4ff /arch
parentfcea45236d3ffcd317296d75612eb163bf734407 (diff)
downloadop-kernel-dev-dca778c5bbf3f1cfcf7f6ef6cadf5a7e5c5d972f.zip
op-kernel-dev-dca778c5bbf3f1cfcf7f6ef6cadf5a7e5c5d972f.tar.gz
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>
Diffstat (limited to 'arch')
-rw-r--r--arch/arm/kernel/entry-common.S10
1 files changed, 8 insertions, 2 deletions
diff --git a/arch/arm/kernel/entry-common.S b/arch/arm/kernel/entry-common.S
index 1b3fc79..0b60adf 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
OpenPOWER on IntegriCloud