lkml.org 
[lkml]   [2018]   [Mar]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[RFC PATCH for 4.17 07/21] powerpc: Add support for restartable sequences
    Date
    From: Boqun Feng <boqun.feng@gmail.com>

    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 when a
    signal is delivered on top of a restartable sequence critical section.

    Signed-off-by: Boqun Feng <boqun.feng@gmail.com>
    Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
    CC: Benjamin Herrenschmidt <benh@kernel.crashing.org>
    CC: Paul Mackerras <paulus@samba.org>
    CC: Michael Ellerman <mpe@ellerman.id.au>
    CC: Peter Zijlstra <peterz@infradead.org>
    CC: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
    CC: linuxppc-dev@lists.ozlabs.org
    ---
    arch/powerpc/Kconfig | 1 +
    arch/powerpc/kernel/signal.c | 3 +++
    2 files changed, 4 insertions(+)

    diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig
    index 73ce5dd07642..90700b6918ef 100644
    --- a/arch/powerpc/Kconfig
    +++ b/arch/powerpc/Kconfig
    @@ -223,6 +223,7 @@ config PPC
    select HAVE_SYSCALL_TRACEPOINTS
    select HAVE_VIRT_CPU_ACCOUNTING
    select HAVE_IRQ_TIME_ACCOUNTING
    + select HAVE_RSEQ
    select IRQ_DOMAIN
    select IRQ_FORCED_THREADING
    select MODULES_USE_ELF_RELA
    diff --git a/arch/powerpc/kernel/signal.c b/arch/powerpc/kernel/signal.c
    index 61db86ecd318..d3bb3aaaf5ac 100644
    --- a/arch/powerpc/kernel/signal.c
    +++ b/arch/powerpc/kernel/signal.c
    @@ -133,6 +133,8 @@ static void do_signal(struct task_struct *tsk)
    /* Re-enable the breakpoints for the signal stack */
    thread_change_pc(tsk, tsk->thread.regs);

    + rseq_signal_deliver(tsk->thread.regs);
    +
    if (is32) {
    if (ksig.ka.sa.sa_flags & SA_SIGINFO)
    ret = handle_rt_signal32(&ksig, oldset, tsk);
    @@ -164,6 +166,7 @@ void do_notify_resume(struct pt_regs *regs, unsigned long thread_info_flags)
    if (thread_info_flags & _TIF_NOTIFY_RESUME) {
    clear_thread_flag(TIF_NOTIFY_RESUME);
    tracehook_notify_resume(regs);
    + rseq_handle_notify_resume(regs);
    }

    user_enter();
    --
    2.11.0
    \
     
     \ /
      Last update: 2018-03-27 18:10    [W:4.172 / U:0.060 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site