[RFC PATCH v8 3/9] Restartable sequences: ARM 32 architecture support
From: Mathieu Desnoyers <hidden>
Date: 2016-08-19 20:09:53
Also in:
lkml
Subsystem:
arm port, the rest · Maintainers:
Russell King, Linus Torvalds
Call the rseq_handle_notify_resume() function on return to userspace if TIF_NOTIFY_RESUME thread flag is set. Increment the event counter and perform fixup on the pre-signal frame when a signal is delivered on top of a restartable sequence critical section. Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers-vg+e7yoeK/dWk0Htik3J/w@public.gmane.org> CC: Russell King <linux-lFZ/pmaqli7XmaaqVzeoHQ@public.gmane.org> CC: Catalin Marinas <redacted> CC: Will Deacon <redacted> CC: Thomas Gleixner <redacted> CC: Paul Turner <redacted> CC: Andrew Hunter <redacted> CC: Peter Zijlstra <redacted> CC: Andy Lutomirski <redacted> CC: Andi Kleen <andi-Vw/NltI1exuRpAAqCnN02g@public.gmane.org> CC: Dave Watson <redacted> CC: Chris Lameter <redacted> CC: Ingo Molnar <redacted> CC: Ben Maurer <redacted> CC: Steven Rostedt <redacted> CC: "Paul E. McKenney" <redacted> CC: Josh Triplett <redacted> CC: Linus Torvalds <torvalds-de/tnXTf+JLsfHDXvbKv3WD2FQJk+8+b@public.gmane.org> CC: Andrew Morton <akpm-de/tnXTf+JLsfHDXvbKv3WD2FQJk+8+b@public.gmane.org> CC: Boqun Feng <redacted> CC: linux-api-u79uwXL29TY76Z2rM5mHXA@public.gmane.org --- arch/arm/Kconfig | 1 + arch/arm/kernel/signal.c | 7 +++++++ 2 files changed, 8 insertions(+)
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index a9c4e48..d9779c3 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig@@ -77,6 +77,7 @@ config ARM select HAVE_PERF_USER_STACK_DUMP select HAVE_RCU_TABLE_FREE if (SMP && ARM_LPAE) select HAVE_REGS_AND_STACK_ACCESS_API + select HAVE_RSEQ select HAVE_SYSCALL_TRACEPOINTS select HAVE_UID16 select HAVE_VIRT_CPU_ACCOUNTING_GEN
diff --git a/arch/arm/kernel/signal.c b/arch/arm/kernel/signal.c
index 7b8f214..907da02 100644
--- a/arch/arm/kernel/signal.c
+++ b/arch/arm/kernel/signal.c@@ -475,6 +475,12 @@ static void handle_signal(struct ksignal *ksig, struct pt_regs *regs) int ret; /* + * Increment event counter and perform fixup for the pre-signal + * frame. + */ + rseq_signal_deliver(regs); + + /* * Set up the stack frame */ if (ksig->ka.sa.sa_flags & SA_SIGINFO)
@@ -594,6 +600,7 @@ do_work_pending(struct pt_regs *regs, unsigned int thread_flags, int syscall) } else { clear_thread_flag(TIF_NOTIFY_RESUME); tracehook_notify_resume(regs); + rseq_handle_notify_resume(regs); } } local_irq_disable();
--
2.1.4