Received: by 2002:a05:6a10:9848:0:0:0:0 with SMTP id x8csp3326609pxf; Mon, 5 Apr 2021 09:06:34 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzD85plBRmSxfhT/JqJg0zNaUEP1tAe9rd/dKRlLDp4vhw+tdfgIEX5IZKBjsXb2pIEL93b X-Received: by 2002:a17:906:2a16:: with SMTP id j22mr29323467eje.247.1617638794448; Mon, 05 Apr 2021 09:06:34 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1617638794; cv=none; d=google.com; s=arc-20160816; b=T2q6g2EhAjDs1mdyGckKJRu2pMhj59m+zYHG1yVszP6w/UYhV7ddYiEUaUQxKPwhFg E2iLhJcdq03HUkYS07Ipjes8rJb3QotUDsKAbC35f3CscRmbyDl607eLxJnl62osiSob X8ayu1e5nEqrFBc66YtNSiA0k93qKgzfUGkrmpLr0m/4TA2zrDJdVSE85CtyhhBt4R36 7nXrvfcvR/GJrewD2lZGMDGrNZvyv35H1PCQyiMN3C5eJLK4oY8speDWd3m8Pbwqy8u9 xlAGGtpa9m2KOZ8j1ElNWdDFIQXlKRfVFfFHo2EfrApwpwoIOKT5TeGmhrNBd4pE2bph b6mg== 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=D3Ax03yfNWXP7q69uOPklsN1FJah+2i/nGxKNtJpKyE=; b=SGiH4A9IE6OLgRVDaxb5EHvFwoHFHdvKq9qLxM6a9bF6G3b7YFDJHIoFoq4wogrZsb 1ejir5ye3Y6UmCfw1fQvxTwljbddGDARQL6nGLrghXZ8x6IGxVA6EEkBZkXeOy6my9jw 4xbVvDY7BfwdbhYvy40YJjVyBHj0doHbvxTxoVvjrh+nTNIS/Zu4VOzmjsVHEPsKtfiD 8CTY+6vL5WD7FCEp38GM4RKIlIttVnlE0aZeHdHQ9sER4h1/43S6O8NfqAwVTVnSOMBK tutk1u5dQtAjhFp6+8Cjl3F2hF8tTgSozuAeY6R+xKP+M79+eTlvpqb8Eq4YjdxSZpTe piKw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=MCOxFuF5; 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 x2si3308075ejw.20.2021.04.05.09.06.10; Mon, 05 Apr 2021 09:06:34 -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=MCOxFuF5; 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 S239589AbhDEJNx (ORCPT + 99 others); Mon, 5 Apr 2021 05:13:53 -0400 Received: from mail.kernel.org ([198.145.29.99]:56396 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238817AbhDEJKQ (ORCPT ); Mon, 5 Apr 2021 05:10:16 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id CF82161393; Mon, 5 Apr 2021 09:10:06 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1617613807; bh=RKKdrFWeQkOdgj1LQXbC/5PgZEVkm1YqwW++44jCyx8=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=MCOxFuF5CawdtM+MdGF3+C7kd/2y9mXnmXkG/8UK483UWqFohWvEylz61qT7i+eKL SqxEg8Ack7PK3cQ7NWHIHQ78u72PVGDcpW4vAfRwdA5qzS8+hcxF4mjE2usF5+Kb4M Rd7oMp1R0J8N0LbF+yYsk6pW7P8drMMlxjyAtgrs= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Ben Gardon , Sean Christopherson , Paolo Bonzini , Sasha Levin Subject: [PATCH 5.10 098/126] KVM: x86/mmu: Ensure TLBs are flushed for TDP MMU during NX zapping Date: Mon, 5 Apr 2021 10:54:20 +0200 Message-Id: <20210405085034.297181917@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: Sean Christopherson [ Upstream commit 048f49809c526348775425420fb5b8e84fd9a133 ] Honor the "flush needed" return from kvm_tdp_mmu_zap_gfn_range(), which does the flush itself if and only if it yields (which it will never do in this particular scenario), and otherwise expects the caller to do the flush. If pages are zapped from the TDP MMU but not the legacy MMU, then no flush will occur. Fixes: 29cf0f5007a2 ("kvm: x86/mmu: NX largepage recovery for TDP MMU") Cc: stable@vger.kernel.org Cc: Ben Gardon Signed-off-by: Sean Christopherson Message-Id: <20210325200119.1359384-3-seanjc@google.com> Reviewed-by: Ben Gardon Signed-off-by: Paolo Bonzini Signed-off-by: Sasha Levin --- arch/x86/kvm/mmu/mmu.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/arch/x86/kvm/mmu/mmu.c b/arch/x86/kvm/mmu/mmu.c index 94e6bf004576..e69248820d01 100644 --- a/arch/x86/kvm/mmu/mmu.c +++ b/arch/x86/kvm/mmu/mmu.c @@ -5972,6 +5972,8 @@ static void kvm_recover_nx_lpages(struct kvm *kvm) struct kvm_mmu_page *sp; unsigned int ratio; LIST_HEAD(invalid_list); + bool flush = false; + gfn_t gfn_end; ulong to_zap; rcu_idx = srcu_read_lock(&kvm->srcu); @@ -5993,19 +5995,20 @@ static void kvm_recover_nx_lpages(struct kvm *kvm) lpage_disallowed_link); WARN_ON_ONCE(!sp->lpage_disallowed); if (is_tdp_mmu_page(sp)) { - kvm_tdp_mmu_zap_gfn_range(kvm, sp->gfn, - sp->gfn + KVM_PAGES_PER_HPAGE(sp->role.level)); + gfn_end = sp->gfn + KVM_PAGES_PER_HPAGE(sp->role.level); + flush = kvm_tdp_mmu_zap_gfn_range(kvm, sp->gfn, gfn_end); } else { kvm_mmu_prepare_zap_page(kvm, sp, &invalid_list); WARN_ON_ONCE(sp->lpage_disallowed); } if (need_resched() || spin_needbreak(&kvm->mmu_lock)) { - kvm_mmu_commit_zap_page(kvm, &invalid_list); + kvm_mmu_remote_flush_or_zap(kvm, &invalid_list, flush); cond_resched_lock(&kvm->mmu_lock); + flush = false; } } - kvm_mmu_commit_zap_page(kvm, &invalid_list); + kvm_mmu_remote_flush_or_zap(kvm, &invalid_list, flush); spin_unlock(&kvm->mmu_lock); srcu_read_unlock(&kvm->srcu, rcu_idx); -- 2.30.1