]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - arch/x86/kvm/x86.c
KVM: x86: silence preempt warning on kvm_write_guest_time
[karo-tx-linux.git] / arch / x86 / kvm / x86.c
index 3944e917e794fad77dc54d2afaedda47d6dcdca7..ee4714b9dbaee4c2fa93e454f5e79248db96cfe4 100644 (file)
@@ -634,10 +634,12 @@ static void kvm_write_guest_time(struct kvm_vcpu *v)
        if ((!vcpu->time_page))
                return;
 
+       preempt_disable();
        if (unlikely(vcpu->hv_clock_tsc_khz != __get_cpu_var(cpu_tsc_khz))) {
                kvm_set_time_scale(__get_cpu_var(cpu_tsc_khz), &vcpu->hv_clock);
                vcpu->hv_clock_tsc_khz = __get_cpu_var(cpu_tsc_khz);
        }
+       preempt_enable();
 
        /* Keep irq disabled to prevent changes to the clock */
        local_irq_save(flags);
@@ -3934,7 +3936,13 @@ int kvm_arch_vcpu_ioctl_set_sregs(struct kvm_vcpu *vcpu,
 
        vcpu->arch.cr2 = sregs->cr2;
        mmu_reset_needed |= vcpu->arch.cr3 != sregs->cr3;
-       vcpu->arch.cr3 = sregs->cr3;
+
+       down_read(&vcpu->kvm->slots_lock);
+       if (gfn_to_memslot(vcpu->kvm, sregs->cr3 >> PAGE_SHIFT))
+               vcpu->arch.cr3 = sregs->cr3;
+       else
+               set_bit(KVM_REQ_TRIPLE_FAULT, &vcpu->requests);
+       up_read(&vcpu->kvm->slots_lock);
 
        kvm_set_cr8(vcpu, sregs->cr8);