]> git.proxmox.com Git - mirror_ubuntu-hirsute-kernel.git/commitdiff
Merge tag 'core-entry-notify-signal' of git://git.kernel.org/pub/scm/linux/kernel...
authorJens Axboe <axboe@kernel.dk>
Mon, 9 Nov 2020 14:19:32 +0000 (07:19 -0700)
committerJens Axboe <axboe@kernel.dk>
Mon, 9 Nov 2020 14:19:32 +0000 (07:19 -0700)
Core changes to support TASK_NOTIFY_SIGNAL

* tag 'core-entry-notify-signal' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
  task_work: Use TIF_NOTIFY_SIGNAL if available
  entry: Add support for TIF_NOTIFY_SIGNAL
  signal: Add task_sigpending() helper

1  2 
arch/x86/kernel/signal.c
include/linux/entry-common.h
include/linux/tracehook.h
kernel/entry/common.c
kernel/entry/kvm.c
kernel/events/uprobes.c
kernel/signal.c
kernel/task_work.c

Simple merge
index 474f29638d2c9662413f4b820cce8a892cb13c48,c7bfac45f9516df75e3b11e010f8dcdf37324514..b9711e813ec2de3625fef520ada7c4db1266498d
  # define _TIF_UPROBE                  (0)
  #endif
  
+ #ifndef _TIF_NOTIFY_SIGNAL
+ # define _TIF_NOTIFY_SIGNAL           (0)
+ #endif
  /*
 - * TIF flags handled in syscall_enter_from_usermode()
 + * TIF flags handled in syscall_enter_from_user_mode()
   */
  #ifndef ARCH_SYSCALL_ENTER_WORK
  # define ARCH_SYSCALL_ENTER_WORK      (0)
Simple merge
index e9e2df3f3f9eed2df7530d435f1569ed282fb178,42eff115c42694994dde61e584a551d3e8d5cc2a..33bb5f9f399cdf8bba349689c61745a9b19aba15
@@@ -157,10 -139,11 +165,10 @@@ static unsigned long exit_to_user_mode_
                if (ti_work & _TIF_PATCH_PENDING)
                        klp_update_patch_state(current);
  
-               if (ti_work & _TIF_SIGPENDING)
-                       arch_do_signal(regs);
+               if (ti_work & (_TIF_SIGPENDING | _TIF_NOTIFY_SIGNAL))
+                       handle_signal_work(regs, ti_work);
  
                if (ti_work & _TIF_NOTIFY_RESUME) {
 -                      clear_thread_flag(TIF_NOTIFY_RESUME);
                        tracehook_notify_resume(regs);
                        rseq_handle_notify_resume(NULL, regs);
                }
Simple merge
Simple merge
diff --cc kernel/signal.c
Simple merge
index 8d6e1217c451c003cb4659d16a0a09aba886f1f4,ae058893913ce57aa0d23d8a6fa84e8c75cc56a0..15b087286bea45ae2383108ec5713ac0032ddb29
@@@ -29,11 -52,10 +57,10 @@@ static void task_work_notify_signal(str
   * RETURNS:
   * 0 if succeeds or -ESRCH.
   */
 -int
 -task_work_add(struct task_struct *task, struct callback_head *work, int notify)
 +int task_work_add(struct task_struct *task, struct callback_head *work,
 +                enum task_work_notify_mode notify)
  {
        struct callback_head *head;
-       unsigned long flags;
  
        do {
                head = READ_ONCE(task->task_works);
                set_notify_resume(task);
                break;
        case TWA_SIGNAL:
-               /*
-                * Only grab the sighand lock if we don't already have some
-                * task_work pending. This pairs with the smp_store_mb()
-                * in get_signal(), see comment there.
-                */
-               if (!(READ_ONCE(task->jobctl) & JOBCTL_TASK_WORK) &&
-                   lock_task_sighand(task, &flags)) {
-                       task->jobctl |= JOBCTL_TASK_WORK;
-                       signal_wake_up(task, 0);
-                       unlock_task_sighand(task, &flags);
-               }
+               task_work_notify_signal(task);
                break;
 +      default:
 +              WARN_ON_ONCE(1);
 +              break;
        }
  
        return 0;