aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/kvm/x86.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/x86/kvm/x86.c')
-rw-r--r--arch/x86/kvm/x86.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
index bcc0efce85b..4be89e1c014 100644
--- a/arch/x86/kvm/x86.c
+++ b/arch/x86/kvm/x86.c
@@ -5574,7 +5574,7 @@ int kvm_arch_vcpu_ioctl_set_sregs(struct kvm_vcpu *vcpu,
5574 struct kvm_sregs *sregs) 5574 struct kvm_sregs *sregs)
5575{ 5575{
5576 int mmu_reset_needed = 0; 5576 int mmu_reset_needed = 0;
5577 int pending_vec, max_bits; 5577 int pending_vec, max_bits, idx;
5578 struct desc_ptr dt; 5578 struct desc_ptr dt;
5579 5579
5580 dt.size = sregs->idt.limit; 5580 dt.size = sregs->idt.limit;
@@ -5603,10 +5603,13 @@ int kvm_arch_vcpu_ioctl_set_sregs(struct kvm_vcpu *vcpu,
5603 kvm_x86_ops->set_cr4(vcpu, sregs->cr4); 5603 kvm_x86_ops->set_cr4(vcpu, sregs->cr4);
5604 if (sregs->cr4 & X86_CR4_OSXSAVE) 5604 if (sregs->cr4 & X86_CR4_OSXSAVE)
5605 update_cpuid(vcpu); 5605 update_cpuid(vcpu);
5606
5607 idx = srcu_read_lock(&vcpu->kvm->srcu);
5606 if (!is_long_mode(vcpu) && is_pae(vcpu)) { 5608 if (!is_long_mode(vcpu) && is_pae(vcpu)) {
5607 load_pdptrs(vcpu, vcpu->arch.walk_mmu, kvm_read_cr3(vcpu)); 5609 load_pdptrs(vcpu, vcpu->arch.walk_mmu, kvm_read_cr3(vcpu));
5608 mmu_reset_needed = 1; 5610 mmu_reset_needed = 1;
5609 } 5611 }
5612 srcu_read_unlock(&vcpu->kvm->srcu, idx);
5610 5613
5611 if (mmu_reset_needed) 5614 if (mmu_reset_needed)
5612 kvm_mmu_reset_context(vcpu); 5615 kvm_mmu_reset_context(vcpu);