24 Jul, 2020

2 commits

  • 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
    Link: https://lkml.kernel.org/r/20200722220519.833296398@linutronix.de

    Thomas Gleixner
     
  • On syscall entry certain work needs to be done:

    - Establish state (lockdep, context tracking, tracing)
    - Conditional work (ptrace, seccomp, audit...)

    This code is needlessly duplicated and different in all
    architectures.

    Provide a generic version based on the x86 implementation which has all the
    RCU and instrumentation bits right.

    As interrupt/exception entry from user space needs parts of the same
    functionality, provide a function for this as well.

    syscall_enter_from_user_mode() and irqentry_enter_from_user_mode() must be
    called right after the low level ASM entry. The calling code must be
    non-instrumentable. After the functions returns state is correct and the
    subsequent functions can be instrumented.

    Signed-off-by: Thomas Gleixner
    Acked-by: Kees Cook
    Link: https://lkml.kernel.org/r/20200722220519.513463269@linutronix.de

    Thomas Gleixner