entry: Provide infrastructure for work before transitioning to guest mode
authorThomas Gleixner <tglx@linutronix.de>
Wed, 22 Jul 2020 21:59:59 +0000 (23:59 +0200)
committerThomas Gleixner <tglx@linutronix.de>
Fri, 24 Jul 2020 13:03:42 +0000 (15:03 +0200)
commit935ace2fb5cc49ae88bd1f1735ddc51cdc2ebfb3
treee39e6c089dd493abfe99507e089d45eb8d61da6f
parenta5497bab5f72dce38a259a53fd3ac1239a7ecf40
entry: Provide infrastructure for work before transitioning to guest mode

Entering a guest is similar to exiting to user space. Pending work like
handling signals, rescheduling, task work etc. needs to be handled before
that.

Provide generic infrastructure to avoid duplication of the same handling
code all over the place.

The transfer to guest mode handling is different from the exit to usermode
handling, e.g. vs. rseq and live patching, so a separate function is used.

The initial list of work items handled is:

    TIF_SIGPENDING, TIF_NEED_RESCHED, TIF_NOTIFY_RESUME

Architecture specific TIF flags can be added via defines in the
architecture specific include files.

The calling convention is also different from the syscall/interrupt entry
functions as KVM invokes this from the outer vcpu_run() loop with
interrupts and preemption enabled. To prevent missing a pending work item
it invokes a check for pending TIF work from interrupt disabled code right
before transitioning to guest mode. The lockdep, RCU and tracing state
handling is also done directly around the switch to and from guest mode.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Link: https://lkml.kernel.org/r/20200722220519.833296398@linutronix.de
include/linux/entry-kvm.h [new file with mode: 0644]
include/linux/kvm_host.h
kernel/entry/Makefile
kernel/entry/kvm.c [new file with mode: 0644]
virt/kvm/Kconfig