From nobody Mon Apr 6 20:11:41 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id DD563C54EE9 for ; Sat, 3 Sep 2022 00:24:08 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231774AbiICAYH (ORCPT ); Fri, 2 Sep 2022 20:24:07 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:53786 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231411AbiICAXX (ORCPT ); Fri, 2 Sep 2022 20:23:23 -0400 Received: from mail-yb1-xb49.google.com (mail-yb1-xb49.google.com [IPv6:2607:f8b0:4864:20::b49]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6DC7AF72C1 for ; Fri, 2 Sep 2022 17:23:22 -0700 (PDT) Received: by mail-yb1-xb49.google.com with SMTP id v8-20020a258488000000b00695847496a4so2761248ybk.19 for ; Fri, 02 Sep 2022 17:23:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date; bh=sRJGbJUfwvTmIt7TCeDCGPl4C7G33IdwBZhsjLxh4VE=; b=Lrtf7dftYWdQobVdgIYPY6rFbIW/t3fpvvyqbmyM3pcHzZa84O+5S96zD5KZw3DiEJ vuPjMZQlr2ppg9GuBQEI9CH5Ih8F7Jm6P3e8qC2UoXHEDYk9jAClPlYuAOtWDlVxSpJJ EPdEItdldlbw0Ap4kJzxKdBMkwm8rZJv6mj44abpH1vu88KMUqD/B3DRHBnaT0H4Z3MD VL4+VWw/fxVq2p3ZDZ3iHnkzulp4D4CfOVq74bGwJintlSIzuIdnlMjR4g5wbCuo8oEa NPCHC5ZpSHWUGf+aqxBNOyVCdHWJwD2nbKyLepN/mRL4AXLiWmuL0AIDdX8QA1XBGhz9 uX8g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:x-gm-message-state:from:to:cc:subject:date; bh=sRJGbJUfwvTmIt7TCeDCGPl4C7G33IdwBZhsjLxh4VE=; b=cpi992VtjhRagvcDpI6bIvu2/5U+bYaH5s2fANkd1f/32mGL87UH9Fv8CcqcVYZJe4 aQpJlrqS0WhVoOTqfdw1PgrHPw+IFq8HX/twkihkrZmTLgDlbNYnEgOlnXXj9dij019H uRQjOrntAxxwcIAmm68xC2MVxhZCgvTosBQhIBV0MOprlElM0+Pi7ArMsmXlD9aX3tLd UFptdZ0KdfJ5Qj/OF5GDCZjYVH+POIEC6FvCmUX6dQfIietTFt5mouOufoHwARHte6ck d7qQHK2Vtps1j6U3SJbulQW/Rwcy2tgvUnnFYJtNwi+SiaTpYg//s6tCJgdKw2H57hO6 cP0Q== X-Gm-Message-State: ACgBeo0bB/wPH5nydDknyEMEBBjQFUKZmZBs3/4mSU2wHpgAzqDeSios ORCct47Skw7HIryxm7xVvQE0FCI8RLY= X-Google-Smtp-Source: AA6agR6Lvf/iV4NjK3NatuY3tfKZ66unw+gXhNRGQwD51QtjJbXvqUr/zDzU5BLJgHKQONRPn6jy3xdkQ9c= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a25:9986:0:b0:6a7:29ef:133c with SMTP id p6-20020a259986000000b006a729ef133cmr1686245ybo.479.1662164601696; Fri, 02 Sep 2022 17:23:21 -0700 (PDT) Reply-To: Sean Christopherson Date: Sat, 3 Sep 2022 00:22:44 +0000 In-Reply-To: <20220903002254.2411750-1-seanjc@google.com> Mime-Version: 1.0 References: <20220903002254.2411750-1-seanjc@google.com> X-Mailer: git-send-email 2.37.2.789.g6183377224-goog Message-ID: <20220903002254.2411750-14-seanjc@google.com> Subject: [PATCH v2 13/23] KVM: x86: Disable APIC logical map if vCPUs are aliased in logical mode From: Sean Christopherson To: Sean Christopherson , Paolo Bonzini Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org, Suravee Suthikulpanit , Maxim Levitsky , Li RongQing Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" 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 Reviewed-by: Maxim Levitsky --- 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 6b2f538b8fd0..75748c380ceb 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; =20 - if (!is_power_of_2(mask)) { + ldr =3D ffs(mask) - 1; + if (!is_power_of_2(mask) || cluster[ldr]) { new->mode =3D KVM_APIC_MODE_XAPIC_FLAT | KVM_APIC_MODE_XAPIC_CLUSTER; continue; } - cluster[ffs(mask) - 1] =3D apic; + cluster[ldr] =3D apic; } out: old =3D rcu_dereference_protected(kvm->arch.apic_map, --=20 2.37.2.789.g6183377224-goog