Messages in this thread Patch in this message | | | From | Wanpeng Li <> | Subject | [PATCH v2 2/3] context_tracking: Provide separate vtime accounting functions | Date | Tue, 13 Apr 2021 15:16:08 +0800 |
| |
From: Wanpeng Li <wanpengli@tencent.com>
Provide separate vtime accounting functions, because having proper wrappers for that case would be too consistent and less confusing.
Suggested-by: Thomas Gleixner <tglx@linutronix.de> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Sean Christopherson <seanjc@google.com> Cc: Michael Tokarev <mjt@tls.msk.ru> Signed-off-by: Wanpeng Li <wanpengli@tencent.com> --- include/linux/context_tracking.h | 50 ++++++++++++++++++++++++++++++---------- 1 file changed, 38 insertions(+), 12 deletions(-)
diff --git a/include/linux/context_tracking.h b/include/linux/context_tracking.h index d8ad844..491f889 100644 --- a/include/linux/context_tracking.h +++ b/include/linux/context_tracking.h @@ -102,6 +102,40 @@ extern void context_tracking_init(void); static inline void context_tracking_init(void) { } #endif /* CONFIG_CONTEXT_TRACKING_FORCE */ +static __always_inline void vtime_account_guest_enter(void) +{ + if (IS_ENABLED(CONFIG_VIRT_CPU_ACCOUNTING_GEN)) { + if (vtime_accounting_enabled_this_cpu()) + vtime_guest_enter(current); + else + current->flags |= PF_VCPU; + } else { + vtime_account_kernel(current); + current->flags |= PF_VCPU; + } +} + +static __always_inline void __vtime_account_guest_exit(void) +{ + if (IS_ENABLED(CONFIG_VIRT_CPU_ACCOUNTING_GEN)) { + if (vtime_accounting_enabled_this_cpu()) + vtime_guest_exit(current); + } else { + vtime_account_kernel(current); + } +} + +static __always_inline void vtime_account_guest_exit(void) +{ + __vtime_account_guest_exit(); + current->flags &= ~PF_VCPU; +} + +static __always_inline void vcpu_account_guest_exit(void) +{ + if (!vtime_accounting_enabled_this_cpu()) + current->flags &= ~PF_VCPU; +} #ifdef CONFIG_VIRT_CPU_ACCOUNTING_GEN static __always_inline void context_guest_enter_irqoff(void) @@ -127,10 +161,7 @@ static __always_inline void context_guest_enter_irqoff(void) static __always_inline void guest_enter_irqoff(void) { instrumentation_begin(); - if (vtime_accounting_enabled_this_cpu()) - vtime_guest_enter(current); - else - current->flags |= PF_VCPU; + vtime_account_guest_enter(); instrumentation_end(); context_guest_enter_irqoff(); @@ -147,10 +178,7 @@ static __always_inline void guest_exit_irqoff(void) context_guest_exit_irqoff(); instrumentation_begin(); - if (vtime_accounting_enabled_this_cpu()) - vtime_guest_exit(current); - else - current->flags &= ~PF_VCPU; + vtime_account_guest_exit(); instrumentation_end(); } @@ -170,8 +198,7 @@ static __always_inline void guest_enter_irqoff(void) * to flush. */ instrumentation_begin(); - vtime_account_kernel(current); - current->flags |= PF_VCPU; + vtime_account_guest_enter(); instrumentation_end(); context_guest_enter_irqoff(); @@ -183,8 +210,7 @@ static __always_inline void guest_exit_irqoff(void) { instrumentation_begin(); /* Flush the guest cputime we spent on the guest */ - vtime_account_kernel(current); - current->flags &= ~PF_VCPU; + vtime_account_guest_exit(); instrumentation_end(); } #endif /* CONFIG_VIRT_CPU_ACCOUNTING_GEN */ -- 2.7.4
| |