|
@@ -7525,15 +7525,18 @@ int kvm_arch_vcpu_ioctl_set_sregs(struct kvm_vcpu *vcpu,
|
|
|
int mmu_reset_needed = 0;
|
|
|
int pending_vec, max_bits, idx;
|
|
|
struct desc_ptr dt;
|
|
|
+ int ret = -EINVAL;
|
|
|
+
|
|
|
+ vcpu_load(vcpu);
|
|
|
|
|
|
if (!guest_cpuid_has(vcpu, X86_FEATURE_XSAVE) &&
|
|
|
(sregs->cr4 & X86_CR4_OSXSAVE))
|
|
|
- return -EINVAL;
|
|
|
+ goto out;
|
|
|
|
|
|
apic_base_msr.data = sregs->apic_base;
|
|
|
apic_base_msr.host_initiated = true;
|
|
|
if (kvm_set_apic_base(vcpu, &apic_base_msr))
|
|
|
- return -EINVAL;
|
|
|
+ goto out;
|
|
|
|
|
|
dt.size = sregs->idt.limit;
|
|
|
dt.address = sregs->idt.base;
|
|
@@ -7599,7 +7602,10 @@ int kvm_arch_vcpu_ioctl_set_sregs(struct kvm_vcpu *vcpu,
|
|
|
|
|
|
kvm_make_request(KVM_REQ_EVENT, vcpu);
|
|
|
|
|
|
- return 0;
|
|
|
+ ret = 0;
|
|
|
+out:
|
|
|
+ vcpu_put(vcpu);
|
|
|
+ return ret;
|
|
|
}
|
|
|
|
|
|
int kvm_arch_vcpu_ioctl_set_guest_debug(struct kvm_vcpu *vcpu,
|