Received: by 2002:a05:6a10:9848:0:0:0:0 with SMTP id x8csp3345362pxf; Mon, 5 Apr 2021 09:35:27 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzRe/eAJAr9R2OFg4GQknYakPJs5DPaR545QVHOP0z+q8zbGDqpOz8WhyYDaVxER8ujxjr/ X-Received: by 2002:a17:907:3e9e:: with SMTP id hs30mr29832774ejc.66.1617640526792; Mon, 05 Apr 2021 09:35:26 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1617640526; cv=none; d=google.com; s=arc-20160816; b=xXGjoNV66vEFH7owz0hT49x+2/W5qUGe+RcNe0NVmkSmVykwQCLD7aN//gvYFD1FmS XTfe3oWsrM5COBpe1Zvh5zUHHxEd0FEFeCgAyJHZtsQjB8oDKcFvgWWth7OBET0n3ljk FRLb6JE2u4zHp+a+mzKFv3q5y1+795Ki70SL9sT/+YO3yQnJL8jrVd+2kNX5KBDzXfVa qNuuBJmrYUy24dwZ8nbXCGeMzTNSfSUlgS17nZv3HKaVp9QeSK56QJtopQilZDMGDHPm GRChWKpRYm17toCJPchEVPk0TRHTqzHS2RkltxAD1KDtAlN6z1oqKkD6+GQb8E2TW/9J +/cw== 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=d7w++xKfcwysDz2POjnWcwFLZH/mgyYf3lkzC+V5oE4=; b=0fwS26pmFpr0TH3B/lkMzr2akpNwoqg1IPEC2nVCSLz6lLutwxFPwH+G747M1s++gI wj+i9tDe+1HSyDwgursDdYuiDseqWNwhOjiBCZlhRpleNbP3jk9YJPNd6Y8mL7oaG9xR dknc8e+hAURQtZJoqTNFJokmQ9Trf3W0WpWr7F8ZZf5APtDEGlMxCdJfvwV9ijcHufbF Qm6KeGWIkqxa+ueeVRX8HCvUfoZqLLypfvJ3rxCklaqmyLXD97p1pE2l/9QzRT2O4oer AQ3wKCTLCuRXD14KD6ey/wz6ZhJ+fpY2QDhU7q8u/b7N315BOuhiLrM2AnH1X2mbL8nI lzWw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=hCd50xED; 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 ly3si13789411ejb.615.2021.04.05.09.35.03; Mon, 05 Apr 2021 09:35:26 -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=hCd50xED; 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 S239362AbhDEJNG (ORCPT + 99 others); Mon, 5 Apr 2021 05:13:06 -0400 Received: from mail.kernel.org ([198.145.29.99]:55260 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239106AbhDEJJa (ORCPT ); Mon, 5 Apr 2021 05:09:30 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id B706161399; Mon, 5 Apr 2021 09:09:22 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1617613763; bh=TLkT/hMV1t1RdOh3n+d4kC0RCv+UaeDxsLuz+og7kyk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=hCd50xEDMVPzKFZ9dY6ZKHkSryyriWQRVuMyDuRMk3Mjz3el5lnnZHGTP3c+CCfNl IYje2rV3AMKbmbMZ7w4TXw9DUa5GD5gHw0JA8LAw3+tyqafwvn23628uZiBDzmGLGe f6htCqkAWKC80iy2M8GPO5UR+yNWCNZTKutUqxRg= 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 083/126] KVM: x86/mmu: Merge flush and non-flush tdp_mmu_iter_cond_resched Date: Mon, 5 Apr 2021 10:54:05 +0200 Message-Id: <20210405085033.817399912@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 e139a34ef9d5627a41e1c02210229082140d1f92 ] The flushing and non-flushing variants of tdp_mmu_iter_cond_resched have almost identical implementations. Merge the two functions and add a flush parameter. Signed-off-by: Ben Gardon Message-Id: <20210202185734.1680553-12-bgardon@google.com> Signed-off-by: Paolo Bonzini Signed-off-by: Sasha Levin --- arch/x86/kvm/mmu/tdp_mmu.c | 42 ++++++++++++-------------------------- 1 file changed, 13 insertions(+), 29 deletions(-) diff --git a/arch/x86/kvm/mmu/tdp_mmu.c b/arch/x86/kvm/mmu/tdp_mmu.c index 22efd016f05e..3b14d0008f92 100644 --- a/arch/x86/kvm/mmu/tdp_mmu.c +++ b/arch/x86/kvm/mmu/tdp_mmu.c @@ -404,33 +404,13 @@ static inline void tdp_mmu_set_spte_no_dirty_log(struct kvm *kvm, for_each_tdp_pte(_iter, __va(_mmu->root_hpa), \ _mmu->shadow_root_level, _start, _end) -/* - * Flush the TLB and yield if the MMU lock is contended or this thread needs to - * return control to the scheduler. - * - * If this function yields, it will also reset the tdp_iter's walk over the - * paging structure and the calling function should allow the iterator to - * continue its traversal from the paging structure root. - * - * Return true if this function yielded, the TLBs were flushed, and the - * iterator's traversal was reset. Return false if a yield was not needed. - */ -static bool tdp_mmu_iter_flush_cond_resched(struct kvm *kvm, struct tdp_iter *iter) -{ - if (need_resched() || spin_needbreak(&kvm->mmu_lock)) { - kvm_flush_remote_tlbs(kvm); - cond_resched_lock(&kvm->mmu_lock); - tdp_iter_refresh_walk(iter); - return true; - } - - return false; -} - /* * Yield if the MMU lock is contended or this thread needs to return control * to the scheduler. * + * If this function should yield and flush is set, it will perform a remote + * TLB flush before yielding. + * * If this function yields, it will also reset the tdp_iter's walk over the * paging structure and the calling function should allow the iterator to * continue its traversal from the paging structure root. @@ -438,9 +418,13 @@ static bool tdp_mmu_iter_flush_cond_resched(struct kvm *kvm, struct tdp_iter *it * Return true if this function yielded and the iterator's traversal was reset. * Return false if a yield was not needed. */ -static bool tdp_mmu_iter_cond_resched(struct kvm *kvm, struct tdp_iter *iter) +static inline bool tdp_mmu_iter_cond_resched(struct kvm *kvm, + struct tdp_iter *iter, bool flush) { if (need_resched() || spin_needbreak(&kvm->mmu_lock)) { + if (flush) + kvm_flush_remote_tlbs(kvm); + cond_resched_lock(&kvm->mmu_lock); tdp_iter_refresh_walk(iter); return true; @@ -483,7 +467,7 @@ static bool zap_gfn_range(struct kvm *kvm, struct kvm_mmu_page *root, tdp_mmu_set_spte(kvm, &iter, 0); flush_needed = !can_yield || - !tdp_mmu_iter_flush_cond_resched(kvm, &iter); + !tdp_mmu_iter_cond_resched(kvm, &iter, true); } return flush_needed; } @@ -852,7 +836,7 @@ static bool wrprot_gfn_range(struct kvm *kvm, struct kvm_mmu_page *root, tdp_mmu_set_spte_no_dirty_log(kvm, &iter, new_spte); spte_set = true; - tdp_mmu_iter_cond_resched(kvm, &iter); + tdp_mmu_iter_cond_resched(kvm, &iter, false); } return spte_set; } @@ -911,7 +895,7 @@ static bool clear_dirty_gfn_range(struct kvm *kvm, struct kvm_mmu_page *root, tdp_mmu_set_spte_no_dirty_log(kvm, &iter, new_spte); spte_set = true; - tdp_mmu_iter_cond_resched(kvm, &iter); + tdp_mmu_iter_cond_resched(kvm, &iter, false); } return spte_set; } @@ -1027,7 +1011,7 @@ static bool set_dirty_gfn_range(struct kvm *kvm, struct kvm_mmu_page *root, tdp_mmu_set_spte(kvm, &iter, new_spte); spte_set = true; - tdp_mmu_iter_cond_resched(kvm, &iter); + tdp_mmu_iter_cond_resched(kvm, &iter, false); } return spte_set; @@ -1080,7 +1064,7 @@ static void zap_collapsible_spte_range(struct kvm *kvm, tdp_mmu_set_spte(kvm, &iter, 0); - spte_set = !tdp_mmu_iter_flush_cond_resched(kvm, &iter); + spte_set = !tdp_mmu_iter_cond_resched(kvm, &iter, true); } if (spte_set) -- 2.30.1