From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752105AbcISOrK (ORCPT ); Mon, 19 Sep 2016 10:47:10 -0400 Received: from mail.southpole.se ([37.247.8.11]:36447 "EHLO mail.southpole.se" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751633AbcISOqd (ORCPT ); Mon, 19 Sep 2016 10:46:33 -0400 Subject: Re: [PATCH 3/7] openrisc: restore call-saved regs on sigreturn To: Stafford Horne , Stefan Kristiansson , Andrew Morton References: <1474036985-20981-1-git-send-email-shorne@gmail.com> <1474036985-20981-4-git-send-email-shorne@gmail.com> Cc: linux-kernel@vger.kernel.org From: Jonas Bonn Message-ID: <57DFF60E.5030106@southpole.se> Date: Mon, 19 Sep 2016 16:28:30 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.6.0 MIME-Version: 1.0 In-Reply-To: <1474036985-20981-4-git-send-email-shorne@gmail.com> Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit X-Assp-Version: 2.5.1(16177) on assp.southpole.se X-Assp-ID: assp.southpole.se 95312-11906 X-Assp-Session: 7F0FF17550B8 (mail 1) X-Assp-Client-SSL: yes X-Assp-Server-TLS: yes Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 09/16/2016 04:43 PM, Stafford Horne wrote: > From: Jonas Bonn > > Return to userspace via _resume_userspace instead of via syscall return > path for the rt_sigreturn syscall. > > I'll rework this comment more later, but this patch needs testing. This whole patch was reworked later... what happened to that work? I recall it being posted for testing without feedback... In any case, the patch comment needs cleaning up. /Jonas > > Old comment from previous patch: > > The sigreturn syscall is more like a context switch than a function call; > it entails a return from one context (the signal handler) to another > (the process in question). For a context switch like this there are > effectively no call-saved regs that remain constant across the transition. > > This patch restores the call-saved regs from pt_regs before returning from > the syscall, effectively restoring the context that the process had before > being interrupted by the signal handler. Restoring the call-saved regs > in this way allows us to return to userspace via the usual syscall fast > path. > > Reported-by: Sebastian Macke > Signed-off-by: Jonas Bonn > Signed-off-by: Stafford Horne > --- > arch/openrisc/kernel/entry.S | 10 +++++++++- > 1 file changed, 9 insertions(+), 1 deletion(-) > > diff --git a/arch/openrisc/kernel/entry.S b/arch/openrisc/kernel/entry.S > index fec8bf9..572d223 100644 > --- a/arch/openrisc/kernel/entry.S > +++ b/arch/openrisc/kernel/entry.S > @@ -1101,8 +1101,16 @@ ENTRY(__sys_fork) > l.addi r3,r1,0 > > ENTRY(sys_rt_sigreturn) > - l.j _sys_rt_sigreturn > + l.jal _sys_rt_sigreturn > l.addi r3,r1,0 > + l.sfne r30,r0 > + l.bnf _no_syscall_trace > + l.nop > + l.jal do_syscall_trace_leave > + l.addi r3,r1,0 > +_no_syscall_trace: > + l.j _resume_userspace > + l.nop > > /* This is a catch-all syscall for atomic instructions for the OpenRISC 1000. > * The functions takes a variable number of parameters depending on which