Received: by 2002:a05:6a10:9848:0:0:0:0 with SMTP id x8csp3326559pxf; Mon, 5 Apr 2021 09:06:31 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxmdDGi1WGA8KmAqGrkaYOpBKkGC056kGLMQQOEW/UOYqTBTwvheYNJ6GMh2P/hsGVpi14n X-Received: by 2002:a17:906:39cf:: with SMTP id i15mr29099942eje.534.1617638791048; Mon, 05 Apr 2021 09:06:31 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1617638791; cv=none; d=google.com; s=arc-20160816; b=mZm9WS62psnQviKhFwy4KeVHt4p+C27V/psnhi4S1R5w7c32AIfZVm0yuFmY+lsjnV IoOkImgqdoCCQVrEXgTgEuQlwzBuSmIGzEvWCXf+kYm0hpqqA+sOITSKKwS6vtXG4+zv apQAS9FeFGaSAtemNOrvT5tY+rH0n2qhZx2LNz7/j/0EhI+vilrfJN8J5S36M9jZipph lgmNH1z7T5mDLcpc2l222DTdd6FUinNr7hG4ePr90bPL/A8MmTSMG7C1w3ljk1G5ZJML D699JzeUoIhtUAb2yAgZPOr6f8XtKK9ADWBpZktbUbQoN7DpJDKUQr1xVg3bAY3nOg7o NIBA== 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=yv2NnxV3bPxWKWzj5xSazXN/qYsvLwaoj3yvCfQx7kc=; b=QpLRFdhMzRDCVuI2asGjmYoiElZsdB+FCZ9RkZaJvi0WNhYpXPr6MAxNSjQwmnYaMk JOOt+IdobhD66JoxYYisbo3REEvEBVImMibTiUOGqy9P+/4Y8ybZcOKArQb41S7nHf23 zbC6mTt5B96z3xX+al3iEsxcINh8hdJTAIzhgFogv42f0pKWn9lJO//Aqw7/RVUO9z7c aSaNK27TV3QOpE279nLrLy4GHRBoNhdAi6lJTd7/LbLxY4qxl+/qljoAGDWCeisY9uH9 3n4VlV9cPT2MdxVLCV29iGJEgPX8wNfAQL7eOgQCYD4DfTxaU6cLh6ejBb2fKd4ZrBMK /q8w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=JdWdIhxk; 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 s12si5863077eju.340.2021.04.05.09.06.07; Mon, 05 Apr 2021 09:06:31 -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=JdWdIhxk; 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 S239551AbhDEJNm (ORCPT + 99 others); Mon, 5 Apr 2021 05:13:42 -0400 Received: from mail.kernel.org ([198.145.29.99]:56048 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238618AbhDEJKG (ORCPT ); Mon, 5 Apr 2021 05:10:06 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id A973761002; Mon, 5 Apr 2021 09:09:58 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1617613799; bh=0t2KXVbP35lkEVgCylrq/WZ0hcVK2xZtKclQPYZwiUo=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=JdWdIhxkY9/DDrxIYwTuuVK8jDvRkAViUugUEO0HhgNBG4QVDxEB4p8sEkJXjf9Vx PLWCQooTRWhMm7z0njUjj6+y9oVljIgZOZ9dPtGXpbPhDtJgi2EzMa2JIzH192Tu5p dMPWTVxBr9IMmT9/p/LmpU1IyJs+ft5bd6GZKqrw= 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.10 095/126] KVM: x86/mmu: Factor out functions to add/remove TDP MMU pages Date: Mon, 5 Apr 2021 10:54:17 +0200 Message-Id: <20210405085034.192302116@linuxfoundation.org> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210405085031.040238881@linuxfoundation.org> References: <20210405085031.040238881@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 136311be5890..14d69c01c710 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)); @@ -704,15 +734,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