On Wed, 2022-08-31 at 00:35 +0000, Sean Christopherson wrote: > Disable the optimized APIC logical map if multiple vCPUs are aliased to > the same logical ID. Architecturally, all CPUs whose logical ID matches > the MDA are supposed to receive the interrupt; overwriting existing map > entries can result in missed IPIs. > > Fixes: 1e08ec4a130e ("KVM: optimize apic interrupt delivery") > Signed-off-by: Sean Christopherson <seanjc@xxxxxxxxxx> > --- > arch/x86/kvm/lapic.c | 5 +++-- > 1 file changed, 3 insertions(+), 2 deletions(-) > > diff --git a/arch/x86/kvm/lapic.c b/arch/x86/kvm/lapic.c > index 82278acae95b..d537b51295d6 100644 > --- a/arch/x86/kvm/lapic.c > +++ b/arch/x86/kvm/lapic.c > @@ -303,12 +303,13 @@ void kvm_recalculate_apic_map(struct kvm *kvm) > if (!mask) > continue; > > - if (!is_power_of_2(mask)) { > + ldr = ffs(mask) - 1; > + if (!is_power_of_2(mask) || cluster[ldr]) { > new->mode = KVM_APIC_MODE_XAPIC_FLAT | > KVM_APIC_MODE_XAPIC_CLUSTER; > continue; > } > - cluster[ffs(mask) - 1] = apic; > + cluster[ldr] = apic; > } > out: > old = rcu_dereference_protected(kvm->arch.apic_map, Reviewed-by: Maxim Levitsky <mlevitsk@xxxxxxxxxx> Best regards, Maxim Levitsky