diff options
| -rw-r--r-- | arch/x86/kvm/x86.c | 9 |
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 | ||
| 3073 | static void kvm_set_hflags(struct kvm_vcpu *vcpu, unsigned emul_flags); | ||
| 3074 | |||
| 3073 | static int kvm_vcpu_ioctl_x86_set_vcpu_events(struct kvm_vcpu *vcpu, | 3075 | static 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; |
