events->interrupt.shadow = static_call(kvm_x86_get_interrupt_shadow)(vcpu);
 
        events->nmi.injected = vcpu->arch.nmi_injected;
-       events->nmi.pending = vcpu->arch.nmi_pending != 0;
+       events->nmi.pending = vcpu->arch.nmi_pending;
        events->nmi.masked = static_call(kvm_x86_get_nmi_mask)(vcpu);
 
        /* events->sipi_vector is never valid when reporting to user space */
                                                events->interrupt.shadow);
 
        vcpu->arch.nmi_injected = events->nmi.injected;
-       if (events->flags & KVM_VCPUEVENT_VALID_NMI_PENDING)
+       if (events->flags & KVM_VCPUEVENT_VALID_NMI_PENDING) {
                vcpu->arch.nmi_pending = events->nmi.pending;
+               if (vcpu->arch.nmi_pending)
+                       kvm_make_request(KVM_REQ_NMI, vcpu);
+       }
        static_call(kvm_x86_set_nmi_mask)(vcpu, events->nmi.masked);
 
        if (events->flags & KVM_VCPUEVENT_VALID_SIPI_VECTOR &&