|
@@ -3159,15 +3159,18 @@ static int kvm_vcpu_ioctl_x86_set_vcpu_events(struct kvm_vcpu *vcpu,
|
|
|
kvm_set_hflags(vcpu, hflags);
|
|
|
|
|
|
vcpu->arch.smi_pending = events->smi.pending;
|
|
|
- if (events->smi.smm_inside_nmi)
|
|
|
- vcpu->arch.hflags |= HF_SMM_INSIDE_NMI_MASK;
|
|
|
- else
|
|
|
- vcpu->arch.hflags &= ~HF_SMM_INSIDE_NMI_MASK;
|
|
|
- if (lapic_in_kernel(vcpu)) {
|
|
|
- if (events->smi.latched_init)
|
|
|
- set_bit(KVM_APIC_INIT, &vcpu->arch.apic->pending_events);
|
|
|
+
|
|
|
+ if (events->smi.smm) {
|
|
|
+ if (events->smi.smm_inside_nmi)
|
|
|
+ vcpu->arch.hflags |= HF_SMM_INSIDE_NMI_MASK;
|
|
|
else
|
|
|
- clear_bit(KVM_APIC_INIT, &vcpu->arch.apic->pending_events);
|
|
|
+ vcpu->arch.hflags &= ~HF_SMM_INSIDE_NMI_MASK;
|
|
|
+ if (lapic_in_kernel(vcpu)) {
|
|
|
+ if (events->smi.latched_init)
|
|
|
+ set_bit(KVM_APIC_INIT, &vcpu->arch.apic->pending_events);
|
|
|
+ else
|
|
|
+ clear_bit(KVM_APIC_INIT, &vcpu->arch.apic->pending_events);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|