From mboxrd@z Thu Jan 1 00:00:00 1970 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 A84093D5651; Tue, 24 Mar 2026 16:13:22 +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=1774368802; cv=none; b=MF0uTTwuZnscwc8SYsoXNzWV/yrqfWeFqjqdjAepNHbSkznXEtmW55oXu5/CsPBGhZ1739wRsS8uQfGKGKv38w9i071cyGBbe1SKddX0Yh0wPna7QvPej7QGkY+Dm13mZt3HFDM/qVHdP0nzmKHEWKxY3rIIbEFhis1hGOC64B0= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774368802; c=relaxed/simple; bh=q3LEwBb48yBUwAP/JStffirx0olu9s+cHwEqdRIrL1A=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Jl34BuyZ4aUKIpZL2oNvG8hTUra6RdEJLcYK8KcupMe1emdCy9qTaCjsibSRgAV+EQS34F3h4fbow9eLBUJVxvQXaOlkYBdc+IG5v2hRFt0Rs2ediqCu6KGFcETHECrHCEU+HfDKFYyG/kGVyA/VeJGWKNKwP2FWxZ7vOGUF/Ww= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=CoN99dX6; 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="CoN99dX6" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 1377DC2BCB4; Tue, 24 Mar 2026 16:13:19 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1774368802; bh=q3LEwBb48yBUwAP/JStffirx0olu9s+cHwEqdRIrL1A=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=CoN99dX61S0MN07uvDxl1PC8tuJRWkSSAD1h/KOqSnQ9XqcFDgrWqW3tsmrr3jqzt Df8ySJrrL9Cx7jABG4fmE8ZyNRigdRMkF5S04OKRdznKiOMcB2h3weIQFjRE7KgRUd VKhE0qpXypxsKKXInRWCTYZMPG60vltLesgaOMHLp1na9fHz5owpTp78xa7a8Rm0Cl FhwxxDI7C9qFbVmOqJhYgJ/TNzV8uKoLhDy5sWavl04ArQBdSmU+Xt6NjpddjVXghD FGuYVh4Gv4Dh/fCbemnOt6buaZTqBf1K0FY6pBQhEkPD8NJT8pDyOr8mkrJ1E9I8w4 OKELOpkOCoVqw== 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, "Tycho Andersen (AMD)" Subject: [PATCH v4 1/7] x86/sev: Create a function to clear/zero the RMP Date: Tue, 24 Mar 2026 10:12:55 -0600 Message-ID: <20260324161301.1353976-2-tycho@kernel.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260324161301.1353976-1-tycho@kernel.org> References: <20260324161301.1353976-1-tycho@kernel.org> Precedence: bulk X-Mailing-List: linux-crypto@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit From: Tom Lendacky In preparation for delayed SNP initialization and disablement on shutdown, create a function, clear_rmp(), that clears the RMP bookkeeping area and the RMP entries. Signed-off-by: Tom Lendacky Signed-off-by: Tycho Andersen (AMD) --- arch/x86/virt/svm/sev.c | 41 +++++++++++++++++++++++++++-------------- 1 file changed, 27 insertions(+), 14 deletions(-) diff --git a/arch/x86/virt/svm/sev.c b/arch/x86/virt/svm/sev.c index e35fac0a8a3d..025606969823 100644 --- a/arch/x86/virt/svm/sev.c +++ b/arch/x86/virt/svm/sev.c @@ -242,6 +242,32 @@ void __init snp_fixup_e820_tables(void) } } +static void clear_rmp(void) +{ + unsigned int i; + u64 val; + + if (!cc_platform_has(CC_ATTR_HOST_SEV_SNP)) + return; + + /* Clearing the RMP while SNP is enabled will cause an exception */ + rdmsrq(MSR_AMD64_SYSCFG, val); + if (WARN_ON_ONCE(val & MSR_AMD64_SYSCFG_SNP_EN)) + return; + + memset(rmp_bookkeeping, 0, RMPTABLE_CPU_BOOKKEEPING_SZ); + + for (i = 0; i < rst_max_index; i++) { + struct rmp_segment_desc *desc; + + desc = rmp_segment_table[i]; + if (!desc) + continue; + + memset(desc->rmp_entry, 0, desc->size); + } +} + static bool __init alloc_rmp_segment_desc(u64 segment_pa, u64 segment_size, u64 pa) { u64 rst_index, rmp_segment_size_max; @@ -484,7 +510,6 @@ static bool __init setup_rmptable(void) */ int __init snp_rmptable_init(void) { - unsigned int i; u64 val; if (WARN_ON_ONCE(!cc_platform_has(CC_ATTR_HOST_SEV_SNP))) @@ -504,19 +529,7 @@ int __init snp_rmptable_init(void) if (val & MSR_AMD64_SYSCFG_SNP_EN) goto skip_enable; - /* Zero out the RMP bookkeeping area */ - memset(rmp_bookkeeping, 0, RMPTABLE_CPU_BOOKKEEPING_SZ); - - /* Zero out the RMP entries */ - for (i = 0; i < rst_max_index; i++) { - struct rmp_segment_desc *desc; - - desc = rmp_segment_table[i]; - if (!desc) - continue; - - memset(desc->rmp_entry, 0, desc->size); - } + clear_rmp(); /* MtrrFixDramModEn must be enabled on all the CPUs prior to enabling SNP. */ on_each_cpu(mfd_enable, NULL, 1); -- 2.53.0