Petr Mladek <pmladek@xxxxxxxx> writes: > On Wed 2022-05-04 08:50:22, Seth Forshee wrote: >> On Wed, May 04, 2022 at 03:07:53PM +0200, Petr Mladek wrote: >> > If "no" then I do not understand why TIF_NOTIFY_SIGNAL interrupts >> > the syscall on the real hardware and not in kvm. >> >> It does interrupt, but xfer_to_guest_mode_handle_work() concludes it's >> not necessary to return to userspace and resumes guest execution. > > In this case, we should revert the commit 8df1947c71ee53c7e21 > ("livepatch: Replace the fake signal sending with TIF_NOTIFY_SIGNAL > infrastructure"). The flag TIF_NOTIFY_SIGNAL clearly does not guarantee > restarting the syscall or exiting to the user space with -EINTR. > > It should solve this problem. And it looks like a cleaner solution > to me. Why not just? diff --git a/kernel/entry/kvm.c b/kernel/entry/kvm.c index 9d09f489b60e..cbb192aec13a 100644 --- a/kernel/entry/kvm.c +++ b/kernel/entry/kvm.c @@ -8,13 +8,7 @@ static int xfer_to_guest_mode_work(struct kvm_vcpu *vcpu, unsigned long ti_work) do { int ret; - if (ti_work & (_TIF_SIGPENDING | _TIF_NOTIFY_SIGNAL)) { - clear_notify_signal(); - if (task_work_pending(current)) - task_work_run(); - } - - if (ti_work & _TIF_SIGPENDING) { + if (ti_work & (_TIF_SIGPENDING | _TIF_NOTIFY_SIGNAL)) { kvm_handle_signal_exit(vcpu); return -EINTR; } As far as I can tell the only reason _TIF_NOTIFY_SIGNAL was handled any differently than _TIF_SIGPENDING in xfer_to_guest_mode_work is because of historical confusion. Eric