Received: by 2002:a05:6358:701b:b0:131:369:b2a3 with SMTP id 27csp4342463rwo; Tue, 25 Jul 2023 04:52:52 -0700 (PDT) X-Google-Smtp-Source: APBJJlFdWmrnm/GfeIcWZWxVu5BRir5BXrmJISQfj+5p9ayETfYgxVNoAz7R+4UOwNCXv6jBPQ1Q X-Received: by 2002:aa7:d5cb:0:b0:521:a99b:a233 with SMTP id d11-20020aa7d5cb000000b00521a99ba233mr10323733eds.10.1690285971982; Tue, 25 Jul 2023 04:52:51 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1690285971; cv=none; d=google.com; s=arc-20160816; b=YSNOA6tbhrLOCUCjeC5pcX6fdDTCBQXl4VQu6fkhwYPmjj2pH4NCrE0W1Ph4iSwYVV Cnqrd4Pegi0ziXWl36gMsO7oxsJaB6jb3bC0NKYZSCliIYttmOFk33Qb1GFT2UUjiLLf H41L77RscEsBmXfpCs67PE4yKSrKjuTBhnJWtDlK/GIaE9lXPz/eeZ2YlkFpANakeEE1 Rmse5zc4tTNVxsa/6ip1xQu27NlMrPMwxYB8b+7B6wB2soQvnOTJIVzG7oIhBl8LGD53 Ip/M6U6IyjzgdrKo5F4GQuZ1cWEG5KzeXyT+BMgoGM6H6bXzZpW9RjLKS8bCdexVWEOw RfVw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:user-agent:in-reply-to:content-disposition :mime-version:references:message-id:subject:cc:to:from:date :dkim-signature; bh=uNcZ4rCNx4kdfLuv6DVVd30gZHLY7phQxG04pnObbEg=; fh=wDikmRoCLdB13+747BFnhLMOUkHnowrNLx490X+alJM=; b=bsbpwcoq4JpnoSMt7ZX/CasvRYgwIElyYRtmN5XhHKlmBuQcERiVsNgnoPE6eFnugN l9bYU9fWTvbZUlGRHncKcKfn8JDnHkzS1ZVHqyL3pGM17a+eP3IviMespSmmlumeyNeg pfeVsVpV88WBLlZ9JErqz4KR3xpSb0Z4EirFRRZDn3Xa7JxgHQjpMx6ERva/GPHjznJ+ OYMjgwUuE4Zjn/O3XoaDhUN22l2wDUtwcWiLlB5h9VAAfvDhWj291slevgdX8TWrXKLZ dc88Zpvm3CxYsVsynUXjH7ZSXaRBjfH6dg0fAM6a3ifCd6WOGJcFfQW/J/nvQGU/Xpby SxPg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=KhhuldPd; 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=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id n19-20020a056402515300b0051e1616f284si8372914edd.31.2023.07.25.04.52.27; Tue, 25 Jul 2023 04:52:51 -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=@intel.com header.s=Intel header.b=KhhuldPd; 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=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234862AbjGYLha (ORCPT + 99 others); Tue, 25 Jul 2023 07:37:30 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44438 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234830AbjGYLh0 (ORCPT ); Tue, 25 Jul 2023 07:37:26 -0400 Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E902AF3; Tue, 25 Jul 2023 04:37:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1690285040; x=1721821040; h=date:from:to:cc:subject:message-id:references: mime-version:in-reply-to; bh=dZGU74ILPhWHx0vgkE1suZN6V2yEUYQuoKi735RBe/k=; b=KhhuldPdl5M2iwAcLznC5XwuJccFV7tB0dZPt6mWUvd7q92K3iFIwr5l /zVfo0eEIFYpqTmPutH+QNoWtWUNpPs6rJwqMB4P2RhjH8I9ISnmf+Anz Ui/SR0y5AZ8g3mlDEPFPldVBw2mP5ITd4IT1jzLEM0jcOWFctp/vtKYO8 xfTJjM8B/edngC7WI/NeLapryz5PxpWi45YA0wmQ5k3OekrNWfQiCMw2v eDsSrM71SkgrWdrhC+meG31WDq2L+RcGf0Wrk82eE7gwswZLz4BQ83cPL t6kMwDCtH2gSwRyZir92QBr41vafAXER/m2KBpIzjygpcAKJdv6tQL+Hn g==; X-IronPort-AV: E=McAfee;i="6600,9927,10781"; a="352593403" X-IronPort-AV: E=Sophos;i="6.01,230,1684825200"; d="scan'208";a="352593403" Received: from orsmga005.jf.intel.com ([10.7.209.41]) by orsmga106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 25 Jul 2023 04:36:34 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10781"; a="899911236" X-IronPort-AV: E=Sophos;i="6.01,230,1684825200"; d="scan'208";a="899911236" Received: from hegang-mobl.ccr.corp.intel.com (HELO localhost) ([10.254.212.56]) by orsmga005-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 25 Jul 2023 04:36:32 -0700 Date: Tue, 25 Jul 2023 19:36:29 +0800 From: Yu Zhang To: Sean Christopherson Cc: Paolo Bonzini , kvm@vger.kernel.org, linux-kernel@vger.kernel.org, Reima Ishii Subject: Re: [PATCH 5/5] KVM: x86/mmu: Use dummy root, backed by zero page, for !visible guest roots Message-ID: <20230725113628.z7vzxk5g6zdqlftg@linux.intel.com> References: <20230722012350.2371049-1-seanjc@google.com> <20230722012350.2371049-6-seanjc@google.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20230722012350.2371049-6-seanjc@google.com> User-Agent: NeoMutt/20171215 X-Spam-Status: No, score=-2.0 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_EF,SPF_HELO_NONE,SPF_NONE, T_SCC_BODY_TEXT_LINE,URIBL_BLOCKED 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 > diff --git a/arch/x86/kvm/mmu/paging_tmpl.h b/arch/x86/kvm/mmu/paging_tmpl.h > index 122bfc0124d3..e9d4d7b66111 100644 > --- a/arch/x86/kvm/mmu/paging_tmpl.h > +++ b/arch/x86/kvm/mmu/paging_tmpl.h > @@ -646,6 +646,17 @@ static int FNAME(fetch)(struct kvm_vcpu *vcpu, struct kvm_page_fault *fault, > if (WARN_ON(!VALID_PAGE(vcpu->arch.mmu->root.hpa))) > goto out_gpte_changed; > > + /* > + * Load a new root and retry the faulting instruction in the extremely > + * unlikely scenario that the guest root gfn became visible between > + * loading a dummy root and handling the resulting page fault, e.g. if > + * userspace create a memslot in the interim. > + */ > + if (unlikely(kvm_mmu_is_dummy_root(vcpu->arch.mmu->root.hpa))) { > + kvm_mmu_unload(vcpu); Do we really need a kvm_mmu_unload()? Could we just set vcpu->arch.mmu->root.hpa to INVALID_PAGE here? > + goto out_gpte_changed; > + } > + > for_each_shadow_entry(vcpu, fault->addr, it) { > gfn_t table_gfn; B.R. Yu