Received: by 2002:a05:6a10:22f:0:0:0:0 with SMTP id 15csp1418434pxk; Fri, 25 Sep 2020 14:25:10 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyxTJGm8XvoWU4oai2kbSOBQlPI7oDyb28+jMGcAlEysFnIZvpJXCAHv7c/aim5g+HibZ/e X-Received: by 2002:a17:907:20a3:: with SMTP id pw3mr4903337ejb.314.1601069110560; Fri, 25 Sep 2020 14:25:10 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1601069110; cv=none; d=google.com; s=arc-20160816; b=fy+EEoX8ppbZSe+JuJCexc+LNvpgaU3JCXfvjOfPk1Xh649duz8dRtxw9wLc2tZaR2 UwvBh8JJoL/0V45XF0LeZSFRlqeGLeoTMHWQEzVdDMPZAjiL9JIiGR6TkxD/NwphWg6/ +TVaP0+PM7s+5DGjN3thw9uR4Rnrf5T2Q0Wxk+3qktMwNPByJ4+gFtkKC+ArgVzQ4/ZK t0d/WCEwoEXekEE/5gUBloEnmynQg7D+V3rmtKL1f0DtS9a+aKodg6wUbqQy5qHsbTlu nZFnz6Ccj3Z6YasleIFK0arPhHlFEIPztsoSqGz4JjMBeWnTwFgnWcyhEL9zS+D0GYl2 L4Kw== 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:references:mime-version :message-id:in-reply-to:date:sender:dkim-signature; bh=jlWnK0UatliDnGlUAK2d+RzZSNRxAzvcnq5xv9zblSM=; b=rHa74nKlI9rR9b7E2vlHUNtVVmeQY0CWyuLaUeOC8pp36getnsn4wmgU+nXc8UNn/a 0J1Ax+/YqJG62hE+j/rxnQqDAWpE0X5yXifYqH8a0IWXOY/TblJbV5FjSqj+DFOZvwnf Kl7DTyVwE9jisXmhAR7UzbJ4ESyXlhehSqF12ENJfpQUtAkEioCrFH849bDzGhiecCl9 yGtdfm9nTOQEb0VHJXkky50avSIj9cKVWRt2TOUfrOPyAnne7ARKNPgfs9nGy6PjSoVC QfONbmpxhx2klgRda//NNSlZ3+Q631hj/cgIlH97nK7ySMv60JtHSqNt0fDH4hd9WJtS 3FDA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=hUkuJGcG; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 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 vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id l11si2469895ejd.105.2020.09.25.14.24.47; Fri, 25 Sep 2020 14:25:10 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=hUkuJGcG; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 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 S1726149AbgIYVXb (ORCPT + 99 others); Fri, 25 Sep 2020 17:23:31 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33606 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729082AbgIYVXZ (ORCPT ); Fri, 25 Sep 2020 17:23:25 -0400 Received: from mail-pf1-x449.google.com (mail-pf1-x449.google.com [IPv6:2607:f8b0:4864:20::449]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 1C1E3C0613DB for ; Fri, 25 Sep 2020 14:23:25 -0700 (PDT) Received: by mail-pf1-x449.google.com with SMTP id 8so3444387pfx.6 for ; Fri, 25 Sep 2020 14:23:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=sender:date:in-reply-to:message-id:mime-version:references:subject :from:to:cc; bh=jlWnK0UatliDnGlUAK2d+RzZSNRxAzvcnq5xv9zblSM=; b=hUkuJGcGGOWXCuh3cgUdpzlmwWsVSOt/fpbdCKnS3R+E2rmbHpsFzpSNxlPgdkIv8q saKo1DDwM6Gw+SxtWWqGIo+9kwLa/eJc/yR4DKBw0tsuwriRlUz7OPgJO++uvlQtEDsG Lam4xfAZf6CqFaEsTaGSAmqVMgAuPmEr6kl4aYUIsqtnPM7cn6zDxKu6S1z/fJ7zgQPI QbpGj0sef5b15xuSxFDmID4GG4W7J9XbYip+GMGZGrEyG9kb2pFqWA50eSPeqziO8iD0 /4hHeaUrcUi7lYesG6oPInO4ne9seHVstyE4gBV+SlJKAtoj+oEoEm36KETaZ2G3HvwY wzRw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:date:in-reply-to:message-id:mime-version :references:subject:from:to:cc; bh=jlWnK0UatliDnGlUAK2d+RzZSNRxAzvcnq5xv9zblSM=; b=ZHQnuA9evVU8Ki4LruKsfD9xZU1NjP1qrPBEWIz+45foJ5/Y7MlaN2cS6QvcAVkWv4 z3AfrtTJiaCPorY65fbMxi4ugf80UDlJuGMZXGijEqA//SbYvAtFJxcPsMy2U6kN4ZS4 9AflEjmXK6MXwqeuRjEvh9nA7eCO/M7gegD7bo1znGzylsL4dPU6ZGfuk2MeLBAAH9cu GMhMplHnSJZU77Ut1DXE8FB7TUTFBcIPdyBpLD4CTm3JX+BxQSRI/Gyn1bupyA+Js4ue poUZA7NTipVQufLw0KqA3BleNGMXO08pmmEgFxtmVtsTiaLeXbF6HstM1dgAHRz26F9U FmYQ== X-Gm-Message-State: AOAM533GU7VWwgQZuc41jdymb6bhjjfjoB/T+LPuBFnMPoRk7gd4+/ty 3xjuCz6soeCr0l7sWsOaCZO0dyiyRlg8qCRTmY3oFn9B5qaJ4oumOqXvMCZTDI7QTVglSTLD+Br NwDdh/6DCL+MgYtnrOAvY1PWSnzkC5t7JfkE1AG69evetZdt22ljFqA0WVL1QNd6Dvg5naymO Sender: "bgardon via sendgmr" X-Received: from bgardon.sea.corp.google.com ([2620:15c:100:202:f693:9fff:fef4:a293]) (user=bgardon job=sendgmr) by 2002:a17:902:bc8a:b029:d2:2a0b:f09e with SMTP id bb10-20020a170902bc8ab02900d22a0bf09emr1305261plb.33.1601069004450; Fri, 25 Sep 2020 14:23:24 -0700 (PDT) Date: Fri, 25 Sep 2020 14:22:49 -0700 In-Reply-To: <20200925212302.3979661-1-bgardon@google.com> Message-Id: <20200925212302.3979661-10-bgardon@google.com> Mime-Version: 1.0 References: <20200925212302.3979661-1-bgardon@google.com> X-Mailer: git-send-email 2.28.0.709.gb0816b6eb0-goog Subject: [PATCH 09/22] kvm: mmu: Remove disallowed_hugepage_adjust shadow_walk_iterator arg From: Ben Gardon To: linux-kernel@vger.kernel.org, kvm@vger.kernel.org Cc: Cannon Matthews , Paolo Bonzini , Peter Xu , Sean Christopherson , Peter Shier , Peter Feiner , Junaid Shahid , Jim Mattson , Yulei Zhang , Wanpeng Li , Vitaly Kuznetsov , Xiao Guangrong , Ben Gardon Content-Type: text/plain; charset="UTF-8" Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org In order to avoid creating executable hugepages in the TDP MMU PF handler, remove the dependency between disallowed_hugepage_adjust and the shadow_walk_iterator. This will open the function up to being used by the TDP MMU PF handler in a future patch. Tested by running kvm-unit-tests and KVM selftests on an Intel Haswell machine. This series introduced no new failures. This series can be viewed in Gerrit at: https://linux-review.googlesource.com/c/virt/kvm/kvm/+/2538 Signed-off-by: Ben Gardon --- arch/x86/kvm/mmu/mmu.c | 17 +++++++++-------- arch/x86/kvm/mmu/paging_tmpl.h | 3 ++- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/arch/x86/kvm/mmu/mmu.c b/arch/x86/kvm/mmu/mmu.c index 6344e7863a0f5..f6e6fc9959c04 100644 --- a/arch/x86/kvm/mmu/mmu.c +++ b/arch/x86/kvm/mmu/mmu.c @@ -3295,13 +3295,12 @@ static int kvm_mmu_hugepage_adjust(struct kvm_vcpu *vcpu, gfn_t gfn, return level; } -static void disallowed_hugepage_adjust(struct kvm_shadow_walk_iterator it, - gfn_t gfn, kvm_pfn_t *pfnp, int *levelp) +static void disallowed_hugepage_adjust(u64 spte, gfn_t gfn, int cur_level, + kvm_pfn_t *pfnp, int *goal_levelp) { - int level = *levelp; - u64 spte = *it.sptep; + int goal_level = *goal_levelp; - if (it.level == level && level > PG_LEVEL_4K && + if (cur_level == goal_level && goal_level > PG_LEVEL_4K && is_nx_huge_page_enabled() && is_shadow_present_pte(spte) && !is_large_pte(spte)) { @@ -3312,9 +3311,10 @@ static void disallowed_hugepage_adjust(struct kvm_shadow_walk_iterator it, * patching back for them into pfn the next 9 bits of * the address. */ - u64 page_mask = KVM_PAGES_PER_HPAGE(level) - KVM_PAGES_PER_HPAGE(level - 1); + u64 page_mask = KVM_PAGES_PER_HPAGE(goal_level) - + KVM_PAGES_PER_HPAGE(goal_level - 1); *pfnp |= gfn & page_mask; - (*levelp)--; + (*goal_levelp)--; } } @@ -3339,7 +3339,8 @@ static int __direct_map(struct kvm_vcpu *vcpu, gpa_t gpa, int write, * We cannot overwrite existing page tables with an NX * large page, as the leaf could be executable. */ - disallowed_hugepage_adjust(it, gfn, &pfn, &level); + disallowed_hugepage_adjust(*it.sptep, gfn, it.level, + &pfn, &level); base_gfn = gfn & ~(KVM_PAGES_PER_HPAGE(it.level) - 1); if (it.level == level) diff --git a/arch/x86/kvm/mmu/paging_tmpl.h b/arch/x86/kvm/mmu/paging_tmpl.h index 4dd6b1e5b8cf7..6a8666cb0d24b 100644 --- a/arch/x86/kvm/mmu/paging_tmpl.h +++ b/arch/x86/kvm/mmu/paging_tmpl.h @@ -690,7 +690,8 @@ static int FNAME(fetch)(struct kvm_vcpu *vcpu, gpa_t addr, * We cannot overwrite existing page tables with an NX * large page, as the leaf could be executable. */ - disallowed_hugepage_adjust(it, gw->gfn, &pfn, &hlevel); + disallowed_hugepage_adjust(*it.sptep, gw->gfn, it.level, + &pfn, &hlevel); base_gfn = gw->gfn & ~(KVM_PAGES_PER_HPAGE(it.level) - 1); if (it.level == hlevel) -- 2.28.0.709.gb0816b6eb0-goog