]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - arch/x86/kvm/x86.c
Merge tag 'for-linus-20170812' of git://git.infradead.org/linux-mtd
[karo-tx-linux.git] / arch / x86 / kvm / x86.c
index 6c97c82814c45a2412da6e28b4393606da450bb3..d734aa8c5b4f7290e365badd00ea962fd0af9acd 100644 (file)
@@ -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);
+                       }
                }
        }
 
@@ -6215,6 +6218,7 @@ static void kvm_pv_kick_cpu_op(struct kvm *kvm, unsigned long flags, int apicid)
 
        lapic_irq.shorthand = 0;
        lapic_irq.dest_mode = 0;
+       lapic_irq.level = 0;
        lapic_irq.dest_id = apicid;
        lapic_irq.msi_redir_hint = false;