From mboxrd@z Thu Jan 1 00:00:00 1970 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 BAD30C433EF for ; Tue, 3 May 2022 15:07:09 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S237831AbiECPKk (ORCPT ); Tue, 3 May 2022 11:10:40 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36258 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237811AbiECPKi (ORCPT ); Tue, 3 May 2022 11:10:38 -0400 Received: from mail-pj1-x102d.google.com (mail-pj1-x102d.google.com [IPv6:2607:f8b0:4864:20::102d]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5B0903A5CA; Tue, 3 May 2022 08:07:05 -0700 (PDT) Received: by mail-pj1-x102d.google.com with SMTP id r9so15558241pjo.5; Tue, 03 May 2022 08:07:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=kpUXLHmfMO9TwZfWJqVY4XQuTZrvTupEDHXTCZCy2JY=; b=HoXU6gI8QHQ1RysZ3jac2pj95Mt97LCnMGHEQS+r7qZvbLnWXXLqkTDTftKEdLGIOj 0bQR/jUQ2C+CoD8E/X3gaKEpuO6k8PLtjedukszecQhN8D/FNRLdoTZXtJ8IjkTTugQI xoLB9LoRIJYwGLbP+tC0MvlefiAuzHb15+2S/Wn3yO4jkPVtRBowQ0nvr9/V11a56uwb 9om60dgJ5Z9czP1+msCObQwv4gXpmFMBOcm6zRsyESefa7N0p0sLay5lHbhYzulxMoKa ib0kxtpLYZyQ6afIheefLMZNPGUEJaUwsEmwZ2VejQ6pALcCL0l2cHpt1veeX5E8Rlbd 8Zzg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=kpUXLHmfMO9TwZfWJqVY4XQuTZrvTupEDHXTCZCy2JY=; b=vm2Wj3ifIIZvYwXR2KbZf1XRnfQmc1gXmcdbXgOVNYNHyUqdW6PotzBVqtSwJPC4n7 TWJAKho576frwCu000iQDShdIirWMR4AMdXLMFmahfAxFjzrgnUFSdIRQFVL5aWftbBH uAPtX/SBiN7vwWhjR/3wFFqhC9V91N/0UECAhgoGCtsxrvdCjnYY1e3rMyQItlPGdB5Q hrk2ixJlPuGDK9OUGAwuDg9IqHNe6pSAhBiB4XfKotkX2b1gNDijtLIDuJgRy96sRkVd 0sGAriUdwSPaq+jjk7Jx8a0YWwcKMIjCm78lzwChU51wpuRzyOP6wrYx/H8XdGg3fVtS q80g== X-Gm-Message-State: AOAM530HqwuQ/HC9sMBGcJ7m5nmqcRozrGq11eANWB0bDqvPcuPlgwZj NWd0ITe2hZ3aDsImdi3D99OTbKHKJ1s= X-Google-Smtp-Source: ABdhPJyXKA/B5fXITt2ZWIUZno4Y48G54EV1OaTHaH1l4nvmt5c/mF7sCUaPHb2J8DdbevRDT0TOrQ== X-Received: by 2002:a17:90b:3d0:b0:1d9:52e1:de86 with SMTP id go16-20020a17090b03d000b001d952e1de86mr5064916pjb.73.1651590424705; Tue, 03 May 2022 08:07:04 -0700 (PDT) Received: from localhost ([47.251.4.198]) by smtp.gmail.com with ESMTPSA id v8-20020a170902e8c800b0015e8d4eb2dfsm6421548plg.297.2022.05.03.08.07.03 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Tue, 03 May 2022 08:07:04 -0700 (PDT) From: Lai Jiangshan To: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Paolo Bonzini , Sean Christopherson Cc: Lai Jiangshan , Vitaly Kuznetsov , Wanpeng Li , Jim Mattson , Joerg Roedel , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, "H. Peter Anvin" Subject: [PATCH V2 1/7] KVM: X86/MMU: Add using_special_root_page() Date: Tue, 3 May 2022 23:07:29 +0800 Message-Id: <20220503150735.32723-2-jiangshanlai@gmail.com> X-Mailer: git-send-email 2.19.1.6.gb485710b In-Reply-To: <20220503150735.32723-1-jiangshanlai@gmail.com> References: <20220503150735.32723-1-jiangshanlai@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Lai Jiangshan In some case, special roots are used in mmu. It is often using to_shadow_page(mmu->root.hpa) to check if special roots are used. Add using_special_root_page() to directly check if special roots are used or needed to be used even mmu->root.hpa is not set. Prepare for making to_shadow_page(mmu->root.hpa) return non-NULL via using special shadow pages. Signed-off-by: Lai Jiangshan --- arch/x86/kvm/mmu/mmu.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/arch/x86/kvm/mmu/mmu.c b/arch/x86/kvm/mmu/mmu.c index 909372762363..7f20796af351 100644 --- a/arch/x86/kvm/mmu/mmu.c +++ b/arch/x86/kvm/mmu/mmu.c @@ -1711,6 +1711,14 @@ static void drop_parent_pte(struct kvm_mmu_page *sp, mmu_spte_clear_no_track(parent_pte); } +static bool using_special_root_page(struct kvm_mmu *mmu) +{ + if (mmu->root_role.direct) + return mmu->root_role.level == PT32E_ROOT_LEVEL; + else + return mmu->cpu_role.base.level <= PT32E_ROOT_LEVEL; +} + static struct kvm_mmu_page *kvm_mmu_alloc_page(struct kvm_vcpu *vcpu, int direct) { struct kvm_mmu_page *sp; @@ -4241,10 +4249,10 @@ static bool fast_pgd_switch(struct kvm *kvm, struct kvm_mmu *mmu, { /* * For now, limit the caching to 64-bit hosts+VMs in order to avoid - * having to deal with PDPTEs. We may add support for 32-bit hosts/VMs - * later if necessary. + * having to deal with PDPTEs. Special roots can not be put into + * mmu->prev_roots[]. */ - if (VALID_PAGE(mmu->root.hpa) && !to_shadow_page(mmu->root.hpa)) + if (VALID_PAGE(mmu->root.hpa) && using_special_root_page(mmu)) kvm_mmu_free_roots(kvm, mmu, KVM_MMU_ROOT_CURRENT); if (VALID_PAGE(mmu->root.hpa)) -- 2.19.1.6.gb485710b