Received: by 2002:a05:6359:c8b:b0:c7:702f:21d4 with SMTP id go11csp4114038rwb; Tue, 20 Sep 2022 09:01:59 -0700 (PDT) X-Google-Smtp-Source: AMsMyM5Q3WezzWAdpDLOLgLmT5HDxTcad1KLZkBXfI1rmm/QOnE7m5ZyTcISllzr/uXQEb+iOvvz X-Received: by 2002:a17:902:bcc3:b0:178:639a:1a10 with SMTP id o3-20020a170902bcc300b00178639a1a10mr332700pls.159.1663689719509; Tue, 20 Sep 2022 09:01:59 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1663689719; cv=none; d=google.com; s=arc-20160816; b=p4NtwNQH5aXj/xciAGZm361IuS/WoRkRXlnUgmpb1F53V16UgpvbuH3t42vNCxKxyZ qupx8ygoCsI6xOj9joI1DxEUbQk82J6urTvkeUF40Ic5p36/4iu/nKCt5uhwZyY/YH1b l7EZodWJyPM3aLic2IyoDDIYkA9hbRaKrRi3KjKkUIcBLYwTbFNgoodB78huJjvkwaZE xqFxAFD/K80l71VTRfctFAtrL5L1ovrQtHoCW8pQR1dD9x1QGHbh/I5uIkJ0+WiC8xWF RwGYGgEMzDsz2j9zSKTWee9hczXomW2LP134i5K1UeMVswTnNd+3MaA9C45LSmleIHu9 6ZnA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:in-reply-to:content-transfer-encoding :content-disposition:mime-version:references:message-id:subject:cc :to:from:date:dkim-signature; bh=cfeYRDbG1IwqxDDwCZ/PUhlAPjZzrLd37QWr6A2RCdE=; b=W/WUWtkZYlb8Ehzbh8TKXL7cY4czV61ZjpxD6WER6NT/UVOMxYP2xq5i1BjXTWqp9u nI4fO0k7UOrNCbz7o0lBBytX3ARm6VGLiI5gqU6fBNaTvgUMf9jzzQK9zqIpXzB/H393 BwQs6w5t7ia9HpTOxLGfO2D2lml04QRgJPrSGpqwy66Ktku8MXV9e6JFfERPdrl7OMUC SmoChEex6sl5WrbnWnCIT1OqRHxX49R+dFef6jeNvzbHWuFgjD6KS/GtmIBRxiqiG91T aPEnYQTqhaob26huOiat1p5WOwhRduHfWs2+bbcJ5TwPBcSYc+FwiNbgKfXLYQD9WroT /YeA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=qb+EI07L; 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 k14-20020a170902ba8e00b00176a16ca9b1si53932pls.529.2022.09.20.09.01.46; Tue, 20 Sep 2022 09:01:59 -0700 (PDT) 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=qb+EI07L; 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 S230367AbiITPrH (ORCPT + 99 others); Tue, 20 Sep 2022 11:47:07 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48588 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229785AbiITPrF (ORCPT ); Tue, 20 Sep 2022 11:47:05 -0400 Received: from mail-pl1-x635.google.com (mail-pl1-x635.google.com [IPv6:2607:f8b0:4864:20::635]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3C1F461119 for ; Tue, 20 Sep 2022 08:47:04 -0700 (PDT) Received: by mail-pl1-x635.google.com with SMTP id x1so2796963plv.5 for ; Tue, 20 Sep 2022 08:47:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date:from:to :cc:subject:date; bh=cfeYRDbG1IwqxDDwCZ/PUhlAPjZzrLd37QWr6A2RCdE=; b=qb+EI07Lm41KNZTnKWMqAKU2cZUOLNd8Pe+Hofo4HsKJA/i0Se7uhmq/j91oNyb/St 9yiN6awGrXDUxbCMQk53q8eeACZ3cCW/smwKpB0CX06xhQGa1ySRaL/WZLjWSpU1qxgT VaCDlvjLpyCByRXDwSIFixOa6/f7g6htEG49xwX1NCG87V8UYN3c0JKrlURIRBGt0lh6 6HJoF8XxG6Nx5UIsL1MpW8VAZm6peenajwu5hghDhmcQ1gcEcdwX4l60GgqKWZlLEsnv Yy4H0zhEVMVC6n5wx7VxpX9bD16I7A1XlgY329qap8SlPUc3E5zq0Y667AhASHe3mt1b I8Hg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date :x-gm-message-state:from:to:cc:subject:date; bh=cfeYRDbG1IwqxDDwCZ/PUhlAPjZzrLd37QWr6A2RCdE=; b=thoDCQyAePfTG1CKqG7Ixr0knXi94hlwCsjAXmQltkEWT1bBm2KAj/TLze88/myOup dQ7R0V1B4JKlZAlrWQrIxFF0e3SxHqjdVXjJI+R9EO0VL75E3X3K7+74uFfs4DBsf5eq FRUjTQ/rHfZ59kSS4YOrKGUwc5StvgnnzM4eLIgJD8FbKzna/BNHQYSQMMp0sfP63oA8 UKK0ptl+QHr98P1mgQDiVV/O6oP31JY/gYsOy4Oax0NWJo+JFC0KfiFmykPF1qDRT4D5 eJjjKsjA6qg669QVG9qMsvkhruPFvbGCs31FcsxOYsp7YIqqm1kQelpJZX5WKDy2aPAB jv/Q== X-Gm-Message-State: ACrzQf1Vd1LfgQyt5DlYxmHdF/m2elXa8H8IEDXnqbpDHJLPKt3f+3eJ AK0X006FqAPvRPqepFuIrjbnhw== X-Received: by 2002:a17:902:b20a:b0:178:6f5b:f903 with SMTP id t10-20020a170902b20a00b001786f5bf903mr320666plr.39.1663688823605; Tue, 20 Sep 2022 08:47:03 -0700 (PDT) Received: from google.com (7.104.168.34.bc.googleusercontent.com. [34.168.104.7]) by smtp.gmail.com with ESMTPSA id h16-20020aa796d0000000b00540d75197f2sm32072pfq.143.2022.09.20.08.47.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 20 Sep 2022 08:47:03 -0700 (PDT) Date: Tue, 20 Sep 2022 15:46:58 +0000 From: Sean Christopherson To: Maxim Levitsky Cc: Paolo Bonzini , kvm@vger.kernel.org, linux-kernel@vger.kernel.org, Suravee Suthikulpanit , Li RongQing Subject: Re: [PATCH v2 04/23] KVM: x86: Inhibit AVIC SPTEs if any vCPU enables x2APIC Message-ID: References: <20220903002254.2411750-1-seanjc@google.com> <20220903002254.2411750-5-seanjc@google.com> <8a24c36efebfa4fb302587a74e3bc1e088e17be8.camel@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <8a24c36efebfa4fb302587a74e3bc1e088e17be8.camel@redhat.com> X-Spam-Status: No, score=-17.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF, ENV_AND_HDR_SPF_MATCH,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS, USER_IN_DEF_DKIM_WL,USER_IN_DEF_SPF_WL autolearn=ham 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 On Tue, Sep 20, 2022, Maxim Levitsky wrote: > On Sat, 2022-09-03 at 00:22 +0000, Sean Christopherson wrote: > > Reintroduce APICV_INHIBIT_REASON_X2APIC as a "partial" inhibit for AMD > > to fix a bug where the APIC access page is visible to vCPUs that have > > x2APIC enabled, i.e. shouldn't be able to "see" the xAPIC MMIO region. > > > > On AMD, due to its "hybrid" mode where AVIC is enabled when x2APIC is > > enabled even without x2AVIC support, the bug occurs any time AVIC is > > enabled as x2APIC is fully emulated by KVM.? I.e. hardware isn't aware > > that the guest is operating in x2APIC mode. > > > > Opportunistically drop the "can" while updating avic_activate_vmcb()'s > > comment, i.e. to state that KVM _does_ support the hybrid mode.? Move > > the "Note:" down a line to conform to preferred kernel/KVM multi-line > > comment style. > > > > Leave Intel as-is for now to avoid a subtle performance regression, even > > though Intel likely suffers from the same bug.? On Intel, in theory the > > bug rears its head only when vCPUs share host page tables (extremely > > likely) and x2APIC enabling is not consistent within the guest, i.e. if > > some vCPUs have x2APIC enabled and other does do not (unlikely to occur > > except in certain situations, e.g. bringing up APs). > > Are you sure about this? Ah, no. The key on Intel is the separate VMCS control for virtualizing xAPIC accesses. As you note below, KVM will provide memory semantics, which is technically wrong. > This is what I am thinking will happen, I might be wrong but I am not sure: ... > 3. guest accesses the 0xfee00xxx, assuming APICv/x2avic, the hardware won't redirect > the access to apic backing page, but will instead just use that SPTE and let the guest > read/write the private page that we mapped in the range, which is wrong. > > Am I missing something? No, I don't believe so. I'm still hesitant to add the effetive inhibit to Intel, though that's probably just pure paranoia at this point. Probably makes sense to just do it and verify that x2APIC virtualization still works. > Also I somewhat doen't like the partial inhibit - it is to some extent > misleading. I don't have a very strong option on using the inhibit, but its > meaning just feels a bit overloaded. > > So why not to do it this way: > > 1. zap the SPTE always when switching apic mode (e.g move the code in > __kvm_set_or_clear_apicv_inhibit to a common funtion) > > 2. make kvm_faultin_pfn check a flag 'any vcpu enabled x2apic' and refuse > to re-install that spte? > > Something like that (only compile tested, and likely misses memory barriers): Actually, since this is "sticky", we can go even further and just delete the memslot. Deleting the memslot is slightly complicated by the need to drop SRCU if kvm_lapic_set_base() enables x2APIC during KVM_RUN, but that's enough enough to handled by putting the disabling logic in vcpu_run() and using KVM_REQ_UNBLOCK to ensure the memslot is deleted before the vCPU re-enters the guest. Testing now...