Message ID | 20151014223309.GA13900@amt.cnet (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Wed, Oct 14, 2015 at 3:33 PM, Marcelo Tosatti <mtosatti@redhat.com> wrote: > > 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@redhat.com> Reviewed-by: David Matlack <dmatlack@google.com> > > diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c > index 8f0f6ec..0e0332e 100644 > --- a/arch/x86/kvm/x86.c > +++ b/arch/x86/kvm/x86.c > @@ -2030,6 +2030,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; > > @@ -2182,12 +2184,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; > @@ -2830,7 +2826,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); > } > > -- > To unsubscribe from this list: send the line "unsubscribe kvm" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On 15/10/2015 19:10, David Matlack wrote: > > 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@redhat.com> > > Reviewed-by: David Matlack <dmatlack@google.com> Applied to kvm/queue. Thanks Marcelo, and thanks David for the review. Paolo -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index 8f0f6ec..0e0332e 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c @@ -2030,6 +2030,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; @@ -2182,12 +2184,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; @@ -2830,7 +2826,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); }
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@redhat.com> -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html