Seth Forshee 3e684903a8 entry/kvm: Exit to user mode when TIF_NOTIFY_SIGNAL is set
A livepatch transition may stall indefinitely when a kvm vCPU is heavily
loaded. To the host, the vCPU task is a user thread which is spending a
very long time in the ioctl(KVM_RUN) syscall. During livepatch
transition, set_notify_signal() will be called on such tasks to
interrupt the syscall so that the task can be transitioned. This
interrupts guest execution, but when xfer_to_guest_mode_work() sees that
TIF_NOTIFY_SIGNAL is set but not TIF_SIGPENDING it concludes that an
exit to user mode is unnecessary, and guest execution is resumed without
transitioning the task for the livepatch.

This handling of TIF_NOTIFY_SIGNAL is incorrect, as set_notify_signal()
is expected to break tasks out of interruptible kernel loops and cause
them to return to userspace. Change xfer_to_guest_mode_work() to handle
TIF_NOTIFY_SIGNAL the same as TIF_SIGPENDING, signaling to the vCPU run
loop that an exit to userpsace is needed. Any pending task_work will be
run when get_signal() is called from exit_to_user_mode_loop(), so there
is no longer any need to run task work from xfer_to_guest_mode_work().

Suggested-by: "Eric W. Biederman" <ebiederm@xmission.com>
Cc: Petr Mladek <pmladek@suse.com>
Signed-off-by: Seth Forshee <sforshee@digitalocean.com>
Message-Id: <20220504180840.2907296-1-sforshee@digitalocean.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
2022-06-07 11:19:00 -04:00
..
2021-12-02 17:25:21 +09:00
2022-01-11 09:51:26 -08:00
2022-03-28 17:29:53 -07:00
2022-03-22 13:44:21 -07:00
2022-03-21 16:48:55 -07:00
2022-03-23 10:54:27 -07:00
2022-03-22 14:39:12 -07:00
\n
2021-11-06 16:43:20 -07:00
2022-01-11 13:08:21 -08:00
2022-03-21 20:53:11 -07:00
2021-08-11 13:11:12 -07:00
2021-09-08 15:32:35 -07:00
2022-03-15 10:32:44 +01:00
2022-03-28 17:29:53 -07:00
2022-05-01 10:17:17 +02:00
2021-06-18 11:43:08 +02:00
2021-09-08 15:32:34 -07:00
2022-03-23 18:03:08 -07:00
2022-02-28 10:26:40 -05:00
2021-10-14 13:29:18 +02:00
2022-01-08 12:43:57 -06:00
2022-03-28 17:29:53 -07:00
2022-02-25 09:36:06 +01:00