Skip to content

Commit f4ef191

Browse files
Wanpeng Lirkrcmar
authored andcommitted
KVM: X86: Fix loss of pending INIT due to race
When SMP VM start, AP may lost INIT because of receiving INIT between kvm_vcpu_ioctl_x86_get/set_vcpu_events. vcpu 0 vcpu 1 kvm_vcpu_ioctl_x86_get_vcpu_events events->smi.latched_init = 0 send INIT to vcpu1 set vcpu1's pending_events kvm_vcpu_ioctl_x86_set_vcpu_events if (events->smi.latched_init == 0) clear INIT in pending_events This patch fixes it by just update SMM related flags if we are in SMM. Thanks Peng Hao for the report and original commit message. Reported-by: Peng Hao <[email protected]> Cc: Paolo Bonzini <[email protected]> Cc: Radim Krčmář <[email protected]> Signed-off-by: Wanpeng Li <[email protected]> Reviewed-by: Paolo Bonzini <[email protected]> Signed-off-by: Radim Krčmář <[email protected]>
1 parent 337c017 commit f4ef191

File tree

1 file changed

+11
-8
lines changed

1 file changed

+11
-8
lines changed

arch/x86/kvm/x86.c

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3159,15 +3159,18 @@ static int kvm_vcpu_ioctl_x86_set_vcpu_events(struct kvm_vcpu *vcpu,
31593159
kvm_set_hflags(vcpu, hflags);
31603160

31613161
vcpu->arch.smi_pending = events->smi.pending;
3162-
if (events->smi.smm_inside_nmi)
3163-
vcpu->arch.hflags |= HF_SMM_INSIDE_NMI_MASK;
3164-
else
3165-
vcpu->arch.hflags &= ~HF_SMM_INSIDE_NMI_MASK;
3166-
if (lapic_in_kernel(vcpu)) {
3167-
if (events->smi.latched_init)
3168-
set_bit(KVM_APIC_INIT, &vcpu->arch.apic->pending_events);
3162+
3163+
if (events->smi.smm) {
3164+
if (events->smi.smm_inside_nmi)
3165+
vcpu->arch.hflags |= HF_SMM_INSIDE_NMI_MASK;
31693166
else
3170-
clear_bit(KVM_APIC_INIT, &vcpu->arch.apic->pending_events);
3167+
vcpu->arch.hflags &= ~HF_SMM_INSIDE_NMI_MASK;
3168+
if (lapic_in_kernel(vcpu)) {
3169+
if (events->smi.latched_init)
3170+
set_bit(KVM_APIC_INIT, &vcpu->arch.apic->pending_events);
3171+
else
3172+
clear_bit(KVM_APIC_INIT, &vcpu->arch.apic->pending_events);
3173+
}
31713174
}
31723175
}
31733176

0 commit comments

Comments
 (0)