On Fri, Mar 11, 2016 at 04:53:11PM +0800, Liang Chen wrote: > From: Marcelo Tosatti <mtosatti@xxxxxxxxxx> > > commit 7cae2bedcbd4680b155999655e49c27b9cf020fa upstream > > This patch is needed on lts 3.4, 3.10, 3.12, 3.14, 3.18, and 4.1 for > the same issue. Can you please to pick it up? Thanks, I'm also including this in the 3.16 kernel. Cheers, -- Luís > > As reported at https://bugs.launchpad.net/qemu/+bug/1494350, > it is possible to have vcpu->arch.st.last_steal initialized > from a thread other than vcpu thread, say the iothread, via > KVM_SET_MSRS. > > Which can cause an overflow later (when subtracting from vcpu threads > sched_info.run_delay). > > To avoid that, move steal time accumulation to vcpu entry time, > before copying steal time data to guest. > > Signed-off-by: Marcelo Tosatti <mtosatti@xxxxxxxxxx> > Reviewed-by: David Matlack <dmatlack@xxxxxxxxxx> > Signed-off-by: Paolo Bonzini <pbonzini@xxxxxxxxxx> > --- > arch/x86/kvm/x86.c | 9 ++------- > 1 file changed, 2 insertions(+), 7 deletions(-) > > diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c > index d6e8bd0..7d4f352 100644 > --- a/arch/x86/kvm/x86.c > +++ b/arch/x86/kvm/x86.c > @@ -1987,6 +1987,8 @@ static void accumulate_steal_time(struct kvm_vcpu *vcpu) > > static void record_steal_time(struct kvm_vcpu *vcpu) > { > + accumulate_steal_time(vcpu); > + > if (!(vcpu->arch.st.msr_val & KVM_MSR_ENABLED)) > return; > > @@ -2120,12 +2122,6 @@ int kvm_set_msr_common(struct kvm_vcpu *vcpu, struct msr_data *msr_info) > if (!(data & KVM_MSR_ENABLED)) > break; > > - vcpu->arch.st.last_steal = current->sched_info.run_delay; > - > - preempt_disable(); > - accumulate_steal_time(vcpu); > - preempt_enable(); > - > kvm_make_request(KVM_REQ_STEAL_UPDATE, vcpu); > > break; > @@ -2808,7 +2804,6 @@ void kvm_arch_vcpu_load(struct kvm_vcpu *vcpu, int cpu) > vcpu->cpu = cpu; > } > > - accumulate_steal_time(vcpu); > kvm_make_request(KVM_REQ_STEAL_UPDATE, vcpu); > } > > -- > 1.9.1 > > > -- > To unsubscribe from this list: send the line "unsubscribe stable" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line "unsubscribe stable" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html