Received: by 2002:a05:6a10:9848:0:0:0:0 with SMTP id x8csp3380089pxf; Mon, 5 Apr 2021 10:28:16 -0700 (PDT) X-Google-Smtp-Source: ABdhPJypz5/DQwNN2CQgzRM9XPuRkzxf+K3RPNKG8PhHO4lY5Nqvv2tLg/DVglXc97xSRJoHHP+l X-Received: by 2002:aa7:c89a:: with SMTP id p26mr11991678eds.206.1617643695818; Mon, 05 Apr 2021 10:28:15 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1617643695; cv=none; d=google.com; s=arc-20160816; b=Wg0AqzhvEQRIX1jnTbzPYBVKKCswqUsJbRMoTtcU7kFT2OX/J9adZ8rzHQcSkdL6r6 +ocNexPAuVcBZ8+jB8ZSckUJYtAeeVHi3I3wrcBStHEhp3p+K7Cy+9XOlAYlw9N2xRJT TgUVGiUvaJ6Oq6kYI04gsroDrCo8WGNrdp0ki47WdijL4GgYqlkWDAho+xLnrlavM93L aDLJydt/9ABaTlI5YR4fzAnvAD+rRRL0cH9JK4yrCG8vJUGtPmRkZhUg5WHArBiZ6zsL arvx2BeM5eGrYn0tz2isJePRpEjalqs6u9cnMuS9dbPykbWFplthwFuuukYGGZQoWFQ/ 5s9A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=K9MocJN1fKQGG16/GTt1C1/XZkEUQTJ6FcBOVAl/RbY=; b=MymOZAlu11K1XTiHflVpx8ooh9e/XMFTtzeaid6IaJktPjXwC43Pzo/pJxTMch+DS7 sReSd5QNX4242X+V+j3E+MFZSxUcY9J2tfYUipKJjDMROGBbjmGivk+nQiYZZQicW2pe RdugSfVY0Vasi8arX3HfItdRYxBp/Tm+kINFdIJT2XCYjhag+jDYkEqVLI5Q+14KQIk1 wIE3+FsWDeDh3aNiun1mT0Sy5tQ8LCoxGpBfEORPIxLPHQWirdv7RgdIV+yfzPaGjKY4 Z2kJilalSkakYurAr+a+5Dyr/Ug08wqmcrr5u/PwTexfGIzEynjE9vSK3wLYHVOO8exs hqtg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=eA56dsV+; 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=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id q17si14269222ejj.672.2021.04.05.10.27.52; Mon, 05 Apr 2021 10:28:15 -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=@linuxfoundation.org header.s=korg header.b=eA56dsV+; 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=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240449AbhDEJVP (ORCPT + 99 others); Mon, 5 Apr 2021 05:21:15 -0400 Received: from mail.kernel.org ([198.145.29.99]:38120 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240743AbhDEJQe (ORCPT ); Mon, 5 Apr 2021 05:16:34 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 5937860FE4; Mon, 5 Apr 2021 09:16:28 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1617614188; bh=u8VwryUUxQM9tUhn+ulhhIFfOmHAp8egZEO/fAVA63E=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=eA56dsV+BoUlg0hbyDNWm2ZKlvv0p6lP1G/9Ofm42V9iv0LipxTi2oNg1e3EJor74 itN6Q5Hsfuh90uyNEwG3egAU7LhTh98r3xN+r1LoEbkRt37s0Y6Pk7QI10A4sNggc6 IeKgu3jghEdZnFarGyol+J3TCcpeENs8gqDzZXVo= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Ben Gardon , Paolo Bonzini , Sasha Levin Subject: [PATCH 5.11 117/152] KVM: x86/mmu: Factor out functions to add/remove TDP MMU pages Date: Mon, 5 Apr 2021 10:54:26 +0200 Message-Id: <20210405085038.041851116@linuxfoundation.org> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210405085034.233917714@linuxfoundation.org> References: <20210405085034.233917714@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Ben Gardon [ Upstream commit a9442f594147f95307f691cfba0c31e25dc79b9d ] Move the work of adding and removing TDP MMU pages to/from "secondary" data structures to helper functions. These functions will be built on in future commits to enable MMU operations to proceed (mostly) in parallel. No functional change expected. Signed-off-by: Ben Gardon Message-Id: <20210202185734.1680553-20-bgardon@google.com> Signed-off-by: Paolo Bonzini Signed-off-by: Sasha Levin --- arch/x86/kvm/mmu/tdp_mmu.c | 47 +++++++++++++++++++++++++++++++------- 1 file changed, 39 insertions(+), 8 deletions(-) diff --git a/arch/x86/kvm/mmu/tdp_mmu.c b/arch/x86/kvm/mmu/tdp_mmu.c index 4a2b8844f00f..bc49a5b90086 100644 --- a/arch/x86/kvm/mmu/tdp_mmu.c +++ b/arch/x86/kvm/mmu/tdp_mmu.c @@ -262,6 +262,39 @@ static void handle_changed_spte_dirty_log(struct kvm *kvm, int as_id, gfn_t gfn, } } +/** + * tdp_mmu_link_page - Add a new page to the list of pages used by the TDP MMU + * + * @kvm: kvm instance + * @sp: the new page + * @account_nx: This page replaces a NX large page and should be marked for + * eventual reclaim. + */ +static void tdp_mmu_link_page(struct kvm *kvm, struct kvm_mmu_page *sp, + bool account_nx) +{ + lockdep_assert_held_write(&kvm->mmu_lock); + + list_add(&sp->link, &kvm->arch.tdp_mmu_pages); + if (account_nx) + account_huge_nx_page(kvm, sp); +} + +/** + * tdp_mmu_unlink_page - Remove page from the list of pages used by the TDP MMU + * + * @kvm: kvm instance + * @sp: the page to be removed + */ +static void tdp_mmu_unlink_page(struct kvm *kvm, struct kvm_mmu_page *sp) +{ + lockdep_assert_held_write(&kvm->mmu_lock); + + list_del(&sp->link); + if (sp->lpage_disallowed) + unaccount_huge_nx_page(kvm, sp); +} + /** * handle_removed_tdp_mmu_page - handle a pt removed from the TDP structure * @@ -281,10 +314,7 @@ static void handle_removed_tdp_mmu_page(struct kvm *kvm, u64 *pt) trace_kvm_mmu_prepare_zap_page(sp); - list_del(&sp->link); - - if (sp->lpage_disallowed) - unaccount_huge_nx_page(kvm, sp); + tdp_mmu_unlink_page(kvm, sp); for (i = 0; i < PT64_ENT_PER_PAGE; i++) { old_child_spte = READ_ONCE(*(pt + i)); @@ -706,15 +736,16 @@ int kvm_tdp_mmu_map(struct kvm_vcpu *vcpu, gpa_t gpa, u32 error_code, if (!is_shadow_present_pte(iter.old_spte)) { sp = alloc_tdp_mmu_page(vcpu, iter.gfn, iter.level); - list_add(&sp->link, &vcpu->kvm->arch.tdp_mmu_pages); child_pt = sp->spt; + + tdp_mmu_link_page(vcpu->kvm, sp, + huge_page_disallowed && + req_level >= iter.level); + new_spte = make_nonleaf_spte(child_pt, !shadow_accessed_mask); trace_kvm_mmu_get_page(sp, true); - if (huge_page_disallowed && req_level >= iter.level) - account_huge_nx_page(vcpu->kvm, sp); - tdp_mmu_set_spte(vcpu->kvm, &iter, new_spte); } } -- 2.30.1