Messages in this thread | | | Subject | Re: [RFC PATCH v2 11/13] powerpc/syscall: Avoid stack frame in likely part of syscall_call_exception() | From | Christophe Leroy <> | Date | Mon, 6 Apr 2020 20:19:18 +0200 |
| |
Le 06/04/2020 à 03:29, Nicholas Piggin a écrit : > Christophe Leroy's on April 6, 2020 3:44 am: >> When r3 is not modified, reload it from regs->orig_r3 to free >> volatile registers. This avoids a stack frame for the likely part >> of syscall_call_exception() >> >> Before : 353 cycles on null_syscall >> After : 347 cycles on null_syscall >>
[...]
>> >> Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr> >> --- >> arch/powerpc/kernel/syscall.c | 2 ++ >> 1 file changed, 2 insertions(+) >> >> diff --git a/arch/powerpc/kernel/syscall.c b/arch/powerpc/kernel/syscall.c >> index 69d75fc4a5eb..630c423e089a 100644 >> --- a/arch/powerpc/kernel/syscall.c >> +++ b/arch/powerpc/kernel/syscall.c >> @@ -91,6 +91,8 @@ notrace long system_call_exception(long r3, long r4, long r5, >> >> } else if (unlikely(r0 >= NR_syscalls)) { >> return -ENOSYS; >> + } else { >> + r3 = regs->orig_gpr3; >> } > > So this just gives enough volatiles to avoid spilling to stack? I wonder > about other various options here if they would cause a spill anyway. > > Interesting optimisation, it would definitely need a comment. Would be > nice if we had a way to tell the compiler that a local can be reloaded > from a particular address.
Ok, comment added.
Christophe
| |