• Sean Christopherson's avatar
    KVM: x86: Skip redundant x2APIC logical mode optimized cluster setup · 76e52750
    Sean Christopherson authored
    Skip the optimized cluster[] setup for x2APIC logical mode, as KVM reuses
    the optimized map's phys_map[] and doesn't actually need to insert the
    target apic into the cluster[].  The LDR is derived from the x2APIC ID,
    and both are read-only in KVM, thus the vCPU's cluster[ldr] is guaranteed
    to be the same entry as the vCPU's phys_map[x2apic_id] entry.
    
    Skipping the unnecessary setup will allow a future fix for aliased xAPIC
    logical IDs to simply require that cluster[ldr] is non-NULL, i.e. won't
    have to special case x2APIC.
    
    Alternatively, the future check could allow "cluster[ldr] == apic", but
    that ends up being terribly confusing because cluster[ldr] is only set
    at the very end, i.e. it's only possible due to x2APIC's shenanigans.
    
    Another alternative would be to send x2APIC down a separate path _after_
    the calculation and then assert that all of the above, but the resulting
    code is rather messy, and it's arguably unnecessary since asserting that
    the actual LDR matches the expected LDR means that simply testing that
    interrupts are delivered correctly provides the same guarantees.
    Reported-by: default avatarSuravee Suthikulpanit <suravee.suthikulpanit@amd.com>
    Reviewed-by: default avatarMaxim Levitsky <mlevitsk@redhat.com>
    Signed-off-by: default avatarSean Christopherson <seanjc@google.com>
    Message-Id: <20230106011306.85230-20-seanjc@google.com>
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    76e52750
lapic.c 81.6 KB