lkml.org 
[lkml]   [2017]   [Nov]   [21]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[RFC PATCH for 4.15 07/22] 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 c51e6ce42e7a..e9992f80819c 100644
    --- a/arch/powerpc/Kconfig
    +++ b/arch/powerpc/Kconfig
    @@ -221,6 +221,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 3d7539b90010..a7b95f7bcaf1 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);
    @@ -161,6 +163,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);
    }

    if (thread_info_flags & _TIF_PATCH_PENDING)
    --
    2.11.0
    \
     
     \ /
      Last update: 2017-11-21 15:24    [W:3.355 / U:0.000 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site