Message ID | 20210415222106.1643837-3-seanjc@google.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | KVM: Fix tick-based accounting for x86 guests | expand |
On 16.04.21 00:20, Sean Christopherson wrote: > From: Wanpeng Li <wanpengli@tencent.com> > > Provide separate vtime accounting functions for guest exit instead of > open coding the logic within the context tracking code. This will allow > KVM x86 to handle vtime accounting slightly differently when using > tick-based accounting. > > Suggested-by: Thomas Gleixner <tglx@linutronix.de> > Cc: Thomas Gleixner <tglx@linutronix.de> > Cc: Michael Tokarev <mjt@tls.msk.ru> > Cc: Christian Borntraeger <borntraeger@de.ibm.com> > Signed-off-by: Wanpeng Li <wanpengli@tencent.com> > Co-developed-by: Sean Christopherson <seanjc@google.com> > Signed-off-by: Sean Christopherson <seanjc@google.com> Reviewed-by: Christian Borntraeger <borntraeger@de.ibm.com> > --- > include/linux/context_tracking.h | 24 +++++++++++++++++------- > 1 file changed, 17 insertions(+), 7 deletions(-) > > diff --git a/include/linux/context_tracking.h b/include/linux/context_tracking.h > index 200d30cb3a82..7cf03a8e5708 100644 > --- a/include/linux/context_tracking.h > +++ b/include/linux/context_tracking.h > @@ -137,15 +137,20 @@ static __always_inline void context_tracking_guest_exit_irqoff(void) > __context_tracking_exit(CONTEXT_GUEST); > } > > -static __always_inline void guest_exit_irqoff(void) > +static __always_inline void vtime_account_guest_exit(void) > { > - context_tracking_guest_exit_irqoff(); > - > - instrumentation_begin(); > if (vtime_accounting_enabled_this_cpu()) > vtime_guest_exit(current); > else > current->flags &= ~PF_VCPU; > +} > + > +static __always_inline void guest_exit_irqoff(void) > +{ > + context_tracking_guest_exit_irqoff(); > + > + instrumentation_begin(); > + vtime_account_guest_exit(); > instrumentation_end(); > } > > @@ -166,12 +171,17 @@ static __always_inline void guest_enter_irqoff(void) > > static __always_inline void context_tracking_guest_exit_irqoff(void) { } > > -static __always_inline void guest_exit_irqoff(void) > +static __always_inline void vtime_account_guest_exit(void) > { > - instrumentation_begin(); > - /* Flush the guest cputime we spent on the guest */ > vtime_account_kernel(current); > current->flags &= ~PF_VCPU; > +} > + > +static __always_inline void guest_exit_irqoff(void) > +{ > + instrumentation_begin(); > + /* Flush the guest cputime we spent on the guest */ > + vtime_account_guest_exit(); > instrumentation_end(); > } > #endif /* CONFIG_VIRT_CPU_ACCOUNTING_GEN */ >
diff --git a/include/linux/context_tracking.h b/include/linux/context_tracking.h index 200d30cb3a82..7cf03a8e5708 100644 --- a/include/linux/context_tracking.h +++ b/include/linux/context_tracking.h @@ -137,15 +137,20 @@ static __always_inline void context_tracking_guest_exit_irqoff(void) __context_tracking_exit(CONTEXT_GUEST); } -static __always_inline void guest_exit_irqoff(void) +static __always_inline void vtime_account_guest_exit(void) { - context_tracking_guest_exit_irqoff(); - - instrumentation_begin(); if (vtime_accounting_enabled_this_cpu()) vtime_guest_exit(current); else current->flags &= ~PF_VCPU; +} + +static __always_inline void guest_exit_irqoff(void) +{ + context_tracking_guest_exit_irqoff(); + + instrumentation_begin(); + vtime_account_guest_exit(); instrumentation_end(); } @@ -166,12 +171,17 @@ static __always_inline void guest_enter_irqoff(void) static __always_inline void context_tracking_guest_exit_irqoff(void) { } -static __always_inline void guest_exit_irqoff(void) +static __always_inline void vtime_account_guest_exit(void) { - instrumentation_begin(); - /* Flush the guest cputime we spent on the guest */ vtime_account_kernel(current); current->flags &= ~PF_VCPU; +} + +static __always_inline void guest_exit_irqoff(void) +{ + instrumentation_begin(); + /* Flush the guest cputime we spent on the guest */ + vtime_account_guest_exit(); instrumentation_end(); } #endif /* CONFIG_VIRT_CPU_ACCOUNTING_GEN */