aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/x86/kvm/x86.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
index 445c51b6cf6d..0b387d61c103 100644
--- a/arch/x86/kvm/x86.c
+++ b/arch/x86/kvm/x86.c
@@ -3070,6 +3070,8 @@ static void kvm_vcpu_ioctl_x86_get_vcpu_events(struct kvm_vcpu *vcpu,
3070 memset(&events->reserved, 0, sizeof(events->reserved)); 3070 memset(&events->reserved, 0, sizeof(events->reserved));
3071} 3071}
3072 3072
3073static void kvm_set_hflags(struct kvm_vcpu *vcpu, unsigned emul_flags);
3074
3073static int kvm_vcpu_ioctl_x86_set_vcpu_events(struct kvm_vcpu *vcpu, 3075static int kvm_vcpu_ioctl_x86_set_vcpu_events(struct kvm_vcpu *vcpu,
3074 struct kvm_vcpu_events *events) 3076 struct kvm_vcpu_events *events)
3075{ 3077{
@@ -3106,10 +3108,13 @@ static int kvm_vcpu_ioctl_x86_set_vcpu_events(struct kvm_vcpu *vcpu,
3106 vcpu->arch.apic->sipi_vector = events->sipi_vector; 3108 vcpu->arch.apic->sipi_vector = events->sipi_vector;
3107 3109
3108 if (events->flags & KVM_VCPUEVENT_VALID_SMM) { 3110 if (events->flags & KVM_VCPUEVENT_VALID_SMM) {
3111 u32 hflags = vcpu->arch.hflags;
3109 if (events->smi.smm) 3112 if (events->smi.smm)
3110 vcpu->arch.hflags |= HF_SMM_MASK; 3113 hflags |= HF_SMM_MASK;
3111 else 3114 else
3112 vcpu->arch.hflags &= ~HF_SMM_MASK; 3115 hflags &= ~HF_SMM_MASK;
3116 kvm_set_hflags(vcpu, hflags);
3117
3113 vcpu->arch.smi_pending = events->smi.pending; 3118 vcpu->arch.smi_pending = events->smi.pending;
3114 if (events->smi.smm_inside_nmi) 3119 if (events->smi.smm_inside_nmi)
3115 vcpu->arch.hflags |= HF_SMM_INSIDE_NMI_MASK; 3120 vcpu->arch.hflags |= HF_SMM_INSIDE_NMI_MASK;