Re: FAILED: patch "[PATCH] KVM: x86: Defer vtime accounting 'til after IRQ handling" failed to apply to 5.10-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



<gregkh@xxxxxxxxxxxxxxxxxxx> 于2021年5月14日周五 下午9:32写道:
>
>
> The patch below does not apply to the 5.10-stable tree.
> If someone wants it applied there, or to any other stable or longterm
> tree, then please email the backport, including the original git commit
> id to <stable@xxxxxxxxxxxxxxx>.

If I first apply 866a6dadbb02 ("context_tracking: Move guest exit
context tracking to separate helpers")
and 88d8220bbf06 ("context_tracking: Move guest exit vtime accounting
to separate helpers")

then I can apply this commit cleanly to latest 5.10.y, I suppose it
will work for 5.12.

>
> thanks,
>
> greg k-h
Thanks!
Jack Wang
>
> ------------------ original commit in Linus's tree ------------------
>
> From 160457140187c5fb127b844e5a85f87f00a01b14 Mon Sep 17 00:00:00 2001
> From: Wanpeng Li <wanpengli@xxxxxxxxxxx>
> Date: Tue, 4 May 2021 17:27:30 -0700
> Subject: [PATCH] KVM: x86: Defer vtime accounting 'til after IRQ handling
>
> Defer the call to account guest time until after servicing any IRQ(s)
> that happened in the guest or immediately after VM-Exit.  Tick-based
> accounting of vCPU time relies on PF_VCPU being set when the tick IRQ
> handler runs, and IRQs are blocked throughout the main sequence of
> vcpu_enter_guest(), including the call into vendor code to actually
> enter and exit the guest.
>
> This fixes a bug where reported guest time remains '0', even when
> running an infinite loop in the guest:
>
>   https://bugzilla.kernel.org/show_bug.cgi?id=209831
>
> Fixes: 87fa7f3e98a131 ("x86/kvm: Move context tracking where it belongs")
> Suggested-by: Thomas Gleixner <tglx@xxxxxxxxxxxxx>
> Co-developed-by: Sean Christopherson <seanjc@xxxxxxxxxx>
> Signed-off-by: Wanpeng Li <wanpengli@xxxxxxxxxxx>
> Signed-off-by: Sean Christopherson <seanjc@xxxxxxxxxx>
> Signed-off-by: Thomas Gleixner <tglx@xxxxxxxxxxxxx>
> Cc: stable@xxxxxxxxxxxxxxx
> Link: https://lore.kernel.org/r/20210505002735.1684165-4-seanjc@xxxxxxxxxx
>
> diff --git a/arch/x86/kvm/svm/svm.c b/arch/x86/kvm/svm/svm.c
> index 9790c73f2a32..c400def6220b 100644
> --- a/arch/x86/kvm/svm/svm.c
> +++ b/arch/x86/kvm/svm/svm.c
> @@ -3753,15 +3753,15 @@ static noinstr void svm_vcpu_enter_exit(struct kvm_vcpu *vcpu)
>          * have them in state 'on' as recorded before entering guest mode.
>          * Same as enter_from_user_mode().
>          *
> -        * guest_exit_irqoff() restores host context and reinstates RCU if
> -        * enabled and required.
> +        * context_tracking_guest_exit() restores host context and reinstates
> +        * RCU if enabled and required.
>          *
>          * This needs to be done before the below as native_read_msr()
>          * contains a tracepoint and x86_spec_ctrl_restore_host() calls
>          * into world and some more.
>          */
>         lockdep_hardirqs_off(CALLER_ADDR0);
> -       guest_exit_irqoff();
> +       context_tracking_guest_exit();
>
>         instrumentation_begin();
>         trace_hardirqs_off_finish();
> diff --git a/arch/x86/kvm/vmx/vmx.c b/arch/x86/kvm/vmx/vmx.c
> index b21d751407b5..e108fb47855b 100644
> --- a/arch/x86/kvm/vmx/vmx.c
> +++ b/arch/x86/kvm/vmx/vmx.c
> @@ -6703,15 +6703,15 @@ static noinstr void vmx_vcpu_enter_exit(struct kvm_vcpu *vcpu,
>          * have them in state 'on' as recorded before entering guest mode.
>          * Same as enter_from_user_mode().
>          *
> -        * guest_exit_irqoff() restores host context and reinstates RCU if
> -        * enabled and required.
> +        * context_tracking_guest_exit() restores host context and reinstates
> +        * RCU if enabled and required.
>          *
>          * This needs to be done before the below as native_read_msr()
>          * contains a tracepoint and x86_spec_ctrl_restore_host() calls
>          * into world and some more.
>          */
>         lockdep_hardirqs_off(CALLER_ADDR0);
> -       guest_exit_irqoff();
> +       context_tracking_guest_exit();
>
>         instrumentation_begin();
>         trace_hardirqs_off_finish();
> diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
> index cebdaa1e3cf5..6eda2834fc05 100644
> --- a/arch/x86/kvm/x86.c
> +++ b/arch/x86/kvm/x86.c
> @@ -9315,6 +9315,15 @@ static int vcpu_enter_guest(struct kvm_vcpu *vcpu)
>         local_irq_disable();
>         kvm_after_interrupt(vcpu);
>
> +       /*
> +        * Wait until after servicing IRQs to account guest time so that any
> +        * ticks that occurred while running the guest are properly accounted
> +        * to the guest.  Waiting until IRQs are enabled degrades the accuracy
> +        * of accounting via context tracking, but the loss of accuracy is
> +        * acceptable for all known use cases.
> +        */
> +       vtime_account_guest_exit();
> +
>         if (lapic_in_kernel(vcpu)) {
>                 s64 delta = vcpu->arch.apic->lapic_timer.advance_expire_delta;
>                 if (delta != S64_MIN) {
>




[Index of Archives]     [Linux Kernel]     [Kernel Development Newbies]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux