----- On Jun 14, 2018, at 7:52 PM, Paul Burton paul.bur...@mips.com wrote: > Syscalls are not allowed inside restartable sequences, so add a call to > rseq_syscall() at the very beginning of the system call exit path when > CONFIG_DEBUG_RSEQ=y. This will help us to detect whether there is a > syscall issued erroneously inside a restartable sequence. > > Signed-off-by: Paul Burton <paul.bur...@mips.com> > Cc: James Hogan <jho...@kernel.org> > Cc: Ralf Baechle <r...@linux-mips.org> > Cc: Mathieu Desnoyers <mathieu.desnoy...@efficios.com> > Cc: Peter Zijlstra <pet...@infradead.org> > Cc: Paul E. McKenney <paul...@linux.vnet.ibm.com> > Cc: Boqun Feng <boqun.f...@gmail.com> > Cc: linux-m...@linux-mips.org > Cc: linux-kernel@vger.kernel.org > --- > > arch/mips/kernel/entry.S | 8 ++++++++ > 1 file changed, 8 insertions(+) > > diff --git a/arch/mips/kernel/entry.S b/arch/mips/kernel/entry.S > index 38a302919e6b..d7de8adcfcc8 100644 > --- a/arch/mips/kernel/entry.S > +++ b/arch/mips/kernel/entry.S > @@ -79,6 +79,10 @@ FEXPORT(ret_from_fork) > jal schedule_tail # a0 = struct task_struct *prev > > FEXPORT(syscall_exit) > +#ifdef CONFIG_DEBUG_RSEQ > + move a0, sp > + jal rseq_syscall > +#endif > local_irq_disable # make sure need_resched and > # signals dont change between > # sampling and return > @@ -141,6 +145,10 @@ work_notifysig: # deal with > pending signals and > j resume_userspace_check > > FEXPORT(syscall_exit_partial) > +#ifdef CONFIG_DEBUG_RSEQ > + move a0, sp > + jal rseq_syscall > +#endif > local_irq_disable # make sure need_resched doesn't > # change between and return > LONG_L a2, TI_FLAGS($28) # current->work
Just to double-check: you did test with CONFIG_DEBUG_RSEQ=y, right ? Are there any live registers that need to be saved before calling rseq_syscall ? Thanks, Mathieu -- Mathieu Desnoyers EfficiOS Inc. http://www.efficios.com