• Paolo Bonzini's avatar
    KVM: x86: Use a stable condition around all VT-d PI paths · 53b7ca1a
    Paolo Bonzini authored
    Currently, checks for whether VT-d PI can be used refer to the current
    status of the feature in the current vCPU; or they more or less pick
    vCPU 0 in case a specific vCPU is not available.
    
    However, these checks do not attempt to synchronize with changes to
    the IRTE.  In particular, there is no path that updates the IRTE when
    APICv is re-activated on vCPU 0; and there is no path to wakeup a CPU
    that has APICv disabled, if the wakeup occurs because of an IRTE
    that points to a posted interrupt.
    
    To fix this, always go through the VT-d PI path as long as there are
    assigned devices and APICv is available on both the host and the VM side.
    Since the relevant condition was copied over three times, take the hint
    and factor it into a separate function.
    Suggested-by: default avatarSean Christopherson <seanjc@google.com>
    Cc: stable@vger.kernel.org
    Reviewed-by: default avatarSean Christopherson <seanjc@google.com>
    Reviewed-by: default avatarMaxim Levitsky <mlevitsk@redhat.com>
    Reviewed-by: default avatarDavid Matlack <dmatlack@google.com>
    Message-Id: <20211123004311.2954158-5-pbonzini@redhat.com>
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    53b7ca1a
posted_intr.c 9.01 KB