On 10/15/20 8:11 AM, Thomas Gleixner wrote: > On Thu, Oct 15 2020 at 07:17, Jens Axboe wrote: >> --- a/arch/x86/kernel/signal.c >> +++ b/arch/x86/kernel/signal.c >> @@ -808,7 +808,10 @@ void arch_do_signal(struct pt_regs *regs, unsigned long ti_work) >> { >> struct ksignal ksig; >> >> - if (get_signal(&ksig)) { >> + if (ti_work & _TIF_NOTIFY_SIGNAL) >> + tracehook_notify_signal(); >> + >> + if ((ti_work & _TIF_SIGPENDING) && get_signal(&ksig)) { >> /* Whee! Actually deliver the signal. */ >> handle_signal(&ksig, regs); >> return; > > Instead of adding this to every architectures signal magic, we can > handle TIF_NOTIFY_SIGNAL in the core code: > > static void handle_singal_work(ti_work, regs) > { > if (ti_work & _TIF_NOTIFY_SIGNAL) > tracehook_notify_signal(); > > arch_do_signal(ti_work, regs); > } > > loop { > if (ti_work & (SIGPENDING | NOTIFY_SIGNAL)) > handle_signal_work(ti_work, regs); > } We could, should probably make it: static void handle_signal_work(ti_work, regs) { if (ti_work & _TIF_NOTIFY_SIGNAL) tracehook_notify_signal(); if (ti_work & _TIF_SIGPENDING) arch_do_signal(regs); } and then we can skip modifying arch_do_signal() all together, as it'll only be called if _TIF_SIGPENDING is set. -- Jens Axboe