xtensa: add support for TIF_NOTIFY_SIGNAL
authorJens Axboe <axboe@kernel.dk>
Fri, 9 Oct 2020 21:56:07 +0000 (15:56 -0600)
committerJens Axboe <axboe@kernel.dk>
Thu, 12 Nov 2020 15:45:56 +0000 (08:45 -0700)
Wire up TIF_NOTIFY_SIGNAL handling for xtensa.

Thanks to Max Filippov <jcmvbkbc@gmail.com> for making the asm correct.

Cc: linux-xtensa@linux-xtensa.org
Signed-off-by: Jens Axboe <axboe@kernel.dk>
arch/xtensa/include/asm/thread_info.h
arch/xtensa/kernel/entry.S
arch/xtensa/kernel/signal.c

index 6acbbe0..a312333 100644 (file)
@@ -111,18 +111,21 @@ static inline struct thread_info *current_thread_info(void)
 #define TIF_NEED_RESCHED       2       /* rescheduling necessary */
 #define TIF_SINGLESTEP         3       /* restore singlestep on return to user mode */
 #define TIF_SYSCALL_TRACEPOINT 4       /* syscall tracepoint instrumentation */
-#define TIF_MEMDIE             5       /* is terminating due to OOM killer */
+#define TIF_NOTIFY_SIGNAL      5       /* signal notifications exist */
 #define TIF_RESTORE_SIGMASK    6       /* restore signal mask in do_signal() */
 #define TIF_NOTIFY_RESUME      7       /* callback before returning to user */
 #define TIF_DB_DISABLED                8       /* debug trap disabled for syscall */
 #define TIF_SYSCALL_AUDIT      9       /* syscall auditing active */
 #define TIF_SECCOMP            10      /* secure computing */
+#define TIF_MEMDIE             11      /* is terminating due to OOM killer */
 
 #define _TIF_SYSCALL_TRACE     (1<<TIF_SYSCALL_TRACE)
 #define _TIF_SIGPENDING                (1<<TIF_SIGPENDING)
 #define _TIF_NEED_RESCHED      (1<<TIF_NEED_RESCHED)
 #define _TIF_SINGLESTEP                (1<<TIF_SINGLESTEP)
 #define _TIF_SYSCALL_TRACEPOINT        (1<<TIF_SYSCALL_TRACEPOINT)
+#define _TIF_NOTIFY_SIGNAL     (1<<TIF_NOTIFY_SIGNAL)
+#define _TIF_NOTIFY_RESUME     (1<<TIF_NOTIFY_RESUME)
 #define _TIF_SYSCALL_AUDIT     (1<<TIF_SYSCALL_AUDIT)
 #define _TIF_SECCOMP           (1<<TIF_SECCOMP)
 
index 703cf62..647b162 100644 (file)
@@ -500,8 +500,8 @@ common_exception_return:
         */
 
        _bbsi.l a4, TIF_NEED_RESCHED, 3f
-       _bbsi.l a4, TIF_NOTIFY_RESUME, 2f
-       _bbci.l a4, TIF_SIGPENDING, 5f
+       movi    a2, _TIF_SIGPENDING | _TIF_NOTIFY_RESUME | _TIF_NOTIFY_SIGNAL
+       bnone   a4, a2, 5f
 
 2:     l32i    a4, a1, PT_DEPC
        bgeui   a4, VALID_DOUBLE_EXCEPTION_ADDRESS, 4f
index 1fb1047..c4d77db 100644 (file)
@@ -498,7 +498,8 @@ static void do_signal(struct pt_regs *regs)
 
 void do_notify_resume(struct pt_regs *regs)
 {
-       if (test_thread_flag(TIF_SIGPENDING))
+       if (test_thread_flag(TIF_SIGPENDING) ||
+           test_thread_flag(TIF_NOTIFY_SIGNAL))
                do_signal(regs);
 
        if (test_thread_flag(TIF_NOTIFY_RESUME))