Move guest enter/exit context tracking to standalone helpers, so that the existing wrappers can be moved under KVM. No functional change intended. Signed-off-by: Sean Christopherson <seanjc@xxxxxxxxxx> --- include/linux/context_tracking.h | 43 +++++++++++++++++++------------- 1 file changed, 26 insertions(+), 17 deletions(-) diff --git a/include/linux/context_tracking.h b/include/linux/context_tracking.h index 58f9a7251d3b..89a1a5ccb2ab 100644 --- a/include/linux/context_tracking.h +++ b/include/linux/context_tracking.h @@ -71,6 +71,30 @@ static inline void exception_exit(enum ctx_state prev_ctx) } } +static __always_inline void context_tracking_guest_enter_irqoff(void) +{ + if (context_tracking_enabled()) + __context_tracking_enter(CONTEXT_GUEST); + + /* KVM does not hold any references to rcu protected data when it + * switches CPU into a guest mode. In fact switching to a guest mode + * is very similar to exiting to userspace from rcu point of view. In + * addition CPU may stay in a guest mode for quite a long time (up to + * one time slice). Lets treat guest mode as quiescent state, just like + * we do with user-mode execution. + */ + if (!context_tracking_enabled_this_cpu()) { + instrumentation_begin(); + rcu_virt_note_context_switch(smp_processor_id()); + instrumentation_end(); + } +} + +static __always_inline void context_tracking_guest_exit_irqoff(void) +{ + if (context_tracking_enabled()) + __context_tracking_exit(CONTEXT_GUEST); +} /** * ct_state() - return the current context tracking state if known @@ -110,27 +134,12 @@ static __always_inline void guest_enter_irqoff(void) vtime_account_guest_enter(); instrumentation_end(); - if (context_tracking_enabled()) - __context_tracking_enter(CONTEXT_GUEST); - - /* KVM does not hold any references to rcu protected data when it - * switches CPU into a guest mode. In fact switching to a guest mode - * is very similar to exiting to userspace from rcu point of view. In - * addition CPU may stay in a guest mode for quite a long time (up to - * one time slice). Lets treat guest mode as quiescent state, just like - * we do with user-mode execution. - */ - if (!context_tracking_enabled_this_cpu()) { - instrumentation_begin(); - rcu_virt_note_context_switch(smp_processor_id()); - instrumentation_end(); - } + context_tracking_guest_enter_irqoff(); } static __always_inline void guest_exit_irqoff(void) { - if (context_tracking_enabled()) - __context_tracking_exit(CONTEXT_GUEST); + context_tracking_guest_exit_irqoff(); instrumentation_begin(); vtime_account_guest_exit(); -- 2.31.1.295.g9ea45b61b8-goog