• Luwei Kang's avatar
    KVM: x86: Recompute PID.ON when clearing PID.SN · c112b5f5
    Luwei Kang authored
    Some Posted-Interrupts from passthrough devices may be lost or
    overwritten when the vCPU is in runnable state.
    
    The SN (Suppress Notification) of PID (Posted Interrupt Descriptor) will
    be set when the vCPU is preempted (vCPU in KVM_MP_STATE_RUNNABLE state but
    not running on physical CPU). If a posted interrupt comes at this time,
    the irq remapping facility will set the bit of PIR (Posted Interrupt
    Requests) but not ON (Outstanding Notification).  Then, the interrupt
    will not be seen by KVM, which always expects PID.ON=1 if PID.PIR=1
    as documented in the Intel processor SDM but not in the VT-d specification.
    To fix this, restore the invariant after PID.SN is cleared.
    Signed-off-by: default avatarLuwei Kang <luwei.kang@intel.com>
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    c112b5f5
x86.c 254 KB