Received: by 2002:a05:6358:16cc:b0:ea:6187:17c9 with SMTP id r12csp1674682rwl; Thu, 5 Jan 2023 17:57:17 -0800 (PST) X-Google-Smtp-Source: AMrXdXuREho7X+7Il8vHZPTZgBS50iUoIyv09dUQPyVA8jht80/e7/smUQXCBhgVhIWucr3z2I37 X-Received: by 2002:a05:6402:1d8a:b0:494:2eb4:89b2 with SMTP id dk10-20020a0564021d8a00b004942eb489b2mr2935761edb.29.1672970236905; Thu, 05 Jan 2023 17:57:16 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1672970236; cv=none; d=google.com; s=arc-20160816; b=GSna6i6BKHhPvUCoeb9xj+T8kV990JdqkFMZ5ceQ4L65RvJJhn3DEVcsy2ewpoh7lK wvKx6MLDKHld+0t23yXdWmxBm25fkMnG9d2WZEDq811+zvIELQvgRhKTb6Qab5ba5msK YbI8HT/4Y5WNd4bGSUxt3sMW/QiaIovgq6XYGEbHJrEEHam1TvNZvxwbZwf//TN5VXLA b7o10mYbBkylJ6lR31vYdTaANrFLPCHcoSzTGL3jlR/gh6iFEmZxvRxaFmbwsuKR+jCb 3D+dEY2dj8LOl18HeBoxFY9kmXGwHr3LmcYutA06N4itHJ2eSG+ruuFcxzyqNHCSchqB sMaA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:reply-to:dkim-signature; bh=+A51GFnbIGYLOWeoxnDIO9I82OkrlDigpTJkMvBwJMw=; b=0uFM9I2JgHCjMM4j/OVYx4lKvF+3nA2XA1opjTnHZ/O6Hxt7anKCAYxu16KxXDl/aA gVv0Lc97Z8bMbIjeJ7hZyxTFmkKlcn3zIkT3UeeXLXOg8N0sVYyXd376GehGDT+6oHK6 zMsHiII5THyS2t97HBQIiJH4O3x0T+/S3XL9c5Bc/+YJtCksvIyarziTqP4HAwyZwfvL cffqjkmXI3WSLmaMPi8tKpJfz2O0wbGibrimhLthbEa3dnHMB0Ea1PPNyyW60I/76am7 F2MJtjrhhT+pXltra/N+32KpYh464Aet4KrJ1SzDsNKxSxRfnaPU0y17c9ail/2dyL/+ SMrg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=F8yzvupP; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id bm3-20020a0564020b0300b0049321069226si18523edb.223.2023.01.05.17.57.03; Thu, 05 Jan 2023 17:57:16 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=F8yzvupP; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232452AbjAFBQP (ORCPT + 55 others); Thu, 5 Jan 2023 20:16:15 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41208 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231561AbjAFBPg (ORCPT ); Thu, 5 Jan 2023 20:15:36 -0500 Received: from mail-pl1-x64a.google.com (mail-pl1-x64a.google.com [IPv6:2607:f8b0:4864:20::64a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0FC9F3227D for ; Thu, 5 Jan 2023 17:14:03 -0800 (PST) Received: by mail-pl1-x64a.google.com with SMTP id j18-20020a170902da9200b00189b3b16addso97691plx.23 for ; Thu, 05 Jan 2023 17:14:03 -0800 (PST) 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:message-id:reply-to; bh=+A51GFnbIGYLOWeoxnDIO9I82OkrlDigpTJkMvBwJMw=; b=F8yzvupPXsGW06DH+1jZGD+zuxJ+ciFFDXXj42wqvm5h/vD4rhWkB30ytSbi5IxBuA Q5xYNnENse/uvcUlUomuo7rHIYID/0orsR2GikNSViLFaGeDyOT+YXUA6lCTMd22/TEh aI3kr97jkgXyYnUf4ENzElIjb1HTY47wtaolr+BE6/YVwz1ssR3YJf4tpjzZ3nVYqzMY ZnhnbxON18+UcKHIAdr2Cljg4XsGGn9t9JwVHz2zt8nMQ5p+aGq4LDXRs9h5/BhafCxC FGAk9Wc0ZmsylkByffi09PfVC11igMnAmYKf47AhvnSHzgj81CSlQ/MCY0a9Im14Ntm5 vS8w== 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:message-id :reply-to; bh=+A51GFnbIGYLOWeoxnDIO9I82OkrlDigpTJkMvBwJMw=; b=FLqfTxCUDuRqQxt013VPfPTDqeajE8ep6hltxOHTAHOHm6SBOQqLDDu0hey33qCFEd 3/iYRkaH/QkiQGlKZr3rAiERv/YEdqjhSjY64FTMFmwu2j6hL4HQUN2ji2dJnlK+EUr5 RmlA06yeHZZBro3nWT/SdzA9x7sZ+aXqi++pweouJC7D18t24hFcgSdYo2nOukKIzWvs ohryWhE4p+h7w+r6z4jPe/AN0DQUDpPKkWYnZsMHfrCy7HKU8qZcZnKcnFSbMruUZYno VEIik/uDyM3XDf4/To4e155JM1mZCQnM3TgikCn0661hZ1aAICwtKzcUUh7kEO/ZEv82 NOIQ== X-Gm-Message-State: AFqh2kpfc6LMMwQh2rWpteNMF92w4kV7yDqqJEbymBHJpcB4gGE9suSC NDBZaqjmf/xaORMXtNhvYwhC338braI= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a17:90b:46d8:b0:226:6523:7849 with SMTP id jx24-20020a17090b46d800b0022665237849mr1263637pjb.66.1672967627955; Thu, 05 Jan 2023 17:13:47 -0800 (PST) Reply-To: Sean Christopherson Date: Fri, 6 Jan 2023 01:12:53 +0000 In-Reply-To: <20230106011306.85230-1-seanjc@google.com> Mime-Version: 1.0 References: <20230106011306.85230-1-seanjc@google.com> X-Mailer: git-send-email 2.39.0.314.g84b9a713c41-goog Message-ID: <20230106011306.85230-21-seanjc@google.com> Subject: [PATCH v5 20/33] KVM: x86: Disable APIC logical map if logical ID covers multiple MDAs From: Sean Christopherson To: Sean Christopherson , Paolo Bonzini Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org, Alejandro Jimenez , Maxim Levitsky , Suravee Suthikulpanit , Li RongQing , Greg Edwards Content-Type: text/plain; charset="UTF-8" X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,USER_IN_DEF_DKIM_WL autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Disable the optimized APIC logical map if a logical ID covers multiple MDAs, i.e. if a vCPU has multiple bits set in its ID. In logical mode, events match if "ID & MDA != 0", i.e. creating an entry for only the first bit can cause interrupts to be missed. Note, creating an entry for every bit is also wrong as KVM would generate IPIs for every matching bit. It would be possible to teach KVM to play nice with this edge case, but it is very much an edge case and probably not used in any real world OS, i.e. it's not worth optimizing. Fixes: 1e08ec4a130e ("KVM: optimize apic interrupt delivery") Signed-off-by: Sean Christopherson Reviewed-by: Maxim Levitsky --- arch/x86/kvm/lapic.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/arch/x86/kvm/lapic.c b/arch/x86/kvm/lapic.c index fd7726ff95c6..dca87bb6dd1a 100644 --- a/arch/x86/kvm/lapic.c +++ b/arch/x86/kvm/lapic.c @@ -343,8 +343,14 @@ void kvm_recalculate_apic_map(struct kvm *kvm) continue; } - if (mask) - cluster[ffs(mask) - 1] = apic; + if (!mask) + continue; + + if (!is_power_of_2(mask)) { + new->logical_mode = KVM_APIC_MODE_MAP_DISABLED; + continue; + } + cluster[ffs(mask) - 1] = apic; } out: old = rcu_dereference_protected(kvm->arch.apic_map, -- 2.39.0.314.g84b9a713c41-goog