[PATCHSET v4] Add support for TIF_NOTIFY_SIGNAL

Jens Axboe
2020-10-08T15:27:59Z

Hi,

The goal is this patch series is to decouple TWA_SIGNAL based task_work
from real signals and signal delivery. The motivation is speeding up
TWA_SIGNAL based task_work, particularly for threaded setups where
->sighand is shared across threads. See the last patch for numbers.

v4 is nicely reduced, thanks to feedback from Oleg, dropping two of the
core patches and resulting in something that is easier to adopt in other
archs as well.

arch/alpha/kernel/signal.c | 1 -
arch/arc/kernel/signal.c | 2 +-
arch/arm/kernel/signal.c | 1 -
arch/arm64/kernel/signal.c | 1 -
arch/c6x/kernel/signal.c | 4 +--
arch/csky/kernel/signal.c | 1 -
arch/h8300/kernel/signal.c | 4 +--
arch/hexagon/kernel/process.c | 1 -
arch/ia64/kernel/process.c | 2 +-
arch/m68k/kernel/signal.c | 2 +-
arch/microblaze/kernel/signal.c | 2 +-
arch/mips/kernel/signal.c | 1 -
arch/nds32/kernel/signal.c | 4 +--
arch/nios2/kernel/signal.c | 2 +-
arch/openrisc/kernel/signal.c | 1 -
arch/parisc/kernel/signal.c | 4 +--
arch/powerpc/kernel/signal.c | 1 -
arch/riscv/kernel/signal.c | 4 +--
arch/s390/kernel/signal.c | 1 -
arch/sh/kernel/signal_32.c | 4 +--
arch/sparc/kernel/signal_32.c | 4 +--
arch/sparc/kernel/signal_64.c | 4 +--
arch/um/kernel/process.c | 2 +-
arch/x86/include/asm/thread_info.h | 2 ++
arch/x86/kernel/signal.c | 5 +++-
arch/xtensa/kernel/signal.c | 2 +-
include/linux/entry-common.h | 6 ++++-
include/linux/entry-kvm.h | 4 +--
include/linux/sched/signal.h | 20 ++++++++++++---
include/linux/tracehook.h | 31 ++++++++++++++++++++--
kernel/entry/common.c | 3 +--
kernel/entry/kvm.c | 7 ++---
kernel/events/uprobes.c | 2 +-
kernel/signal.c | 8 +++---
kernel/task_work.c | 41 +++++++++++++++++++++---------
35 files changed, 113 insertions(+), 71 deletions(-)

Also find the changes here:

https://git.kernel.dk/cgit/linux-block/log/?h=tif-task_work

Changes since v3:

- Drop not needed io_uring change
- Drop syscall restart split, handle TIF_NOTIFY_SIGNAL from the arch
signal handling, using task_sigpending() to see if we need to care
about real signals.
- Fix a few over-zelaous task_sigpending() changes
- Cleanup WARN_ON() in restore_saved_sigmask_unless()

--
Jens Axboe