lkml.org 
[lkml]   [2022]   [Oct]   [30]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v10 079/108] KVM: x86: Assume timer IRQ was injected if APIC state is proteced
    Date
    From: Sean Christopherson <seanjc@google.com>

    If APIC state is protected, i.e. the vCPU is a TDX guest, assume a timer
    IRQ was injected when deciding whether or not to busy wait in the "timer
    advanced" path. The "real" vIRR is not readable/writable, so trying to
    query for a pending timer IRQ will return garbage.

    Note, TDX can scour the PIR if it wants to be more precise and skip the
    "wait" call entirely.

    Signed-off-by: Sean Christopherson <seanjc@google.com>
    Signed-off-by: Isaku Yamahata <isaku.yamahata@intel.com>
    ---
    arch/x86/kvm/lapic.c | 11 ++++++++++-
    1 file changed, 10 insertions(+), 1 deletion(-)

    diff --git a/arch/x86/kvm/lapic.c b/arch/x86/kvm/lapic.c
    index bcf339d02c0a..8d894c3959c8 100644
    --- a/arch/x86/kvm/lapic.c
    +++ b/arch/x86/kvm/lapic.c
    @@ -1606,8 +1606,17 @@ static void apic_update_lvtt(struct kvm_lapic *apic)
    static bool lapic_timer_int_injected(struct kvm_vcpu *vcpu)
    {
    struct kvm_lapic *apic = vcpu->arch.apic;
    - u32 reg = kvm_lapic_get_reg(apic, APIC_LVTT);
    + u32 reg;

    + /*
    + * Assume a timer IRQ was "injected" if the APIC is protected. KVM's
    + * copy of the vIRR is bogus, it's the responsibility of the caller to
    + * precisely check whether or not a timer IRQ is pending.
    + */
    + if (apic->guest_apic_protected)
    + return true;
    +
    + reg = kvm_lapic_get_reg(apic, APIC_LVTT);
    if (kvm_apic_hw_enabled(apic)) {
    int vec = reg & APIC_VECTOR_MASK;
    void *bitmap = apic->regs + APIC_ISR;
    --
    2.25.1
    \
     
     \ /
      Last update: 2022-10-30 07:32    [W:3.566 / U:0.036 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site