From nobody Tue Mar 3 05:05:58 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BABF7366DB7; Mon, 2 Mar 2026 19:14:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772478874; cv=none; b=Trt7e/PdIeNMCIJbIqrSIpSf9LDs0L8UvdCb/S9astKrpe3DCs8cu2icrUrXomv1JaRh+tQK0l/nj1JbLgPTDECGZsZ7Pm3CIlKCP5pqPCqQByAgbmTAs5oQC7aT6CROPTclQ10zd9JmfcIMHiJOO8zZgLbGQ3E7D+o2U6jf8Wo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772478874; c=relaxed/simple; bh=fFDjbzQSB9XtQHzqU10kxCoVxNcp9uM4c+YvBs9ZhlM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=aJhro4J31JRqkDAAtSZN4UrcsbLppX3oezH9/7jP5nufQX86aD1OedTkwJieWzSPmjoj44CVgnWwr77fG3BR25+B+2PJNSNAzAXKFkIi4PNCGSVusDANceldLe1bGSNXn8OIENY5qDHYV7zTat/wY4qeTwBdD29IKI5Y47CBenE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=hWP/dQip; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="hWP/dQip" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 40357C19425; Mon, 2 Mar 2026 19:14:32 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1772478874; bh=fFDjbzQSB9XtQHzqU10kxCoVxNcp9uM4c+YvBs9ZhlM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=hWP/dQipIRxAY+GJ2m/uU6alZOvnIgH/bEFHR1CNTMHyJxhl6xUnMJYzc5BaROTcB IUaFe4WBAUEnh1kCa7n4DKWDWc5zg6xZCMbr2Iitg16JjFPK5+gsK8ekx/27WBqkdE u9pC8GyB18eO27iRjo/+n7CSTXRknvnBdvAKSPGbILB+p94z3rwmvWyvrBfX+k+F2c jVy41AQyTHEFDjeI50OT527JW5+PQfnWdjBPwh+vmfgLKs/sl/BvB4uHxo2lo0EPrw 28WyQ2LReUrYRFRfDgvaM0Nfw0dwoko1qLzgXlrO5nNQZZ/AJiQj3NR8uPfd9Ypgde QH9nRRl6ozmyw== From: Tycho Andersen To: Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, "H. Peter Anvin" , Ashish Kalra , Tom Lendacky , John Allen , Herbert Xu , "David S. Miller" , Ard Biesheuvel , Neeraj Upadhyay , Kishon Vijay Abraham I , Alexey Kardashevskiy , Nikunj A Dadhania , "Peter Zijlstra (Intel)" , Kim Phillips , Sean Christopherson Cc: linux-kernel@vger.kernel.org, linux-crypto@vger.kernel.org Subject: [PATCH 02/11] x86/snp: Keep the RMP table bookkeeping area mapped Date: Mon, 2 Mar 2026 12:13:25 -0700 Message-ID: <20260302191334.937981-3-tycho@kernel.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260302191334.937981-1-tycho@kernel.org> References: <20260302191334.937981-1-tycho@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Tom Lendacky In prep for delayed SNP initialization and disablement on shutdown, the RMP will need to be cleared each time SNP is disabled. Maintain the the mapping to the RMP bookkeeping area to avoid mapping and unmapping it each time and any possible errors that may arise from that. Signed-off-by: Tom Lendacky Signed-off-by: Tycho Andersen (AMD) --- arch/x86/virt/svm/sev.c | 40 +++++++++++++++++----------------------- 1 file changed, 17 insertions(+), 23 deletions(-) diff --git a/arch/x86/virt/svm/sev.c b/arch/x86/virt/svm/sev.c index 1446011c6337..232a385f11cb 100644 --- a/arch/x86/virt/svm/sev.c +++ b/arch/x86/virt/svm/sev.c @@ -117,6 +117,8 @@ static u64 rmp_segment_mask; =20 static u64 rmp_cfg; =20 +static void *rmp_bookkeeping __ro_after_init; + /* Mask to apply to a PFN to get the first PFN of a 2MB page */ #define PFN_PMD_MASK GENMASK_ULL(63, PMD_SHIFT - PAGE_SHIFT) =20 @@ -246,23 +248,6 @@ void __init snp_fixup_e820_tables(void) } } =20 -static bool __init clear_rmptable_bookkeeping(void) -{ - void *bk; - - bk =3D memremap(probed_rmp_base, RMPTABLE_CPU_BOOKKEEPING_SZ, MEMREMAP_WB= ); - if (!bk) { - pr_err("Failed to map RMP bookkeeping area\n"); - return false; - } - - memset(bk, 0, RMPTABLE_CPU_BOOKKEEPING_SZ); - - memunmap(bk); - - return true; -} - static bool __init alloc_rmp_segment_desc(u64 segment_pa, u64 segment_size= , u64 pa) { u64 rst_index, rmp_segment_size_max; @@ -480,10 +465,22 @@ static bool __init setup_segmented_rmptable(void) static bool __init setup_rmptable(void) { if (rmp_cfg & MSR_AMD64_SEG_RMP_ENABLED) { - return setup_segmented_rmptable(); + if (!setup_segmented_rmptable()) + return false; } else { - return setup_contiguous_rmptable(); + if (!setup_contiguous_rmptable()) + return false; } + + rmp_bookkeeping =3D memremap(probed_rmp_base, RMPTABLE_CPU_BOOKKEEPING_SZ= , MEMREMAP_WB); + if (!rmp_bookkeeping) { + pr_err("Failed to map RMP bookkeeping area\n"); + free_rmp_segment_table(); + + return false; + } + + return true; } =20 /* @@ -514,10 +511,7 @@ int __init snp_rmptable_init(void) goto skip_enable; =20 /* Zero out the RMP bookkeeping area */ - if (!clear_rmptable_bookkeeping()) { - free_rmp_segment_table(); - return -ENOSYS; - } + memset(rmp_bookkeeping, 0, RMPTABLE_CPU_BOOKKEEPING_SZ); =20 /* Zero out the RMP entries */ for (i =3D 0; i < rst_max_index; i++) { --=20 2.53.0