From: Tycho Andersen <tycho@kernel.org>
To: Thomas Gleixner <tglx@kernel.org>, Ingo Molnar <mingo@redhat.com>,
Borislav Petkov <bp@alien8.de>,
Dave Hansen <dave.hansen@linux.intel.com>,
x86@kernel.org, "H. Peter Anvin" <hpa@zytor.com>,
Ashish Kalra <ashish.kalra@amd.com>,
Tom Lendacky <thomas.lendacky@amd.com>,
John Allen <john.allen@amd.com>,
Herbert Xu <herbert@gondor.apana.org.au>,
"David S. Miller" <davem@davemloft.net>,
Ard Biesheuvel <ardb@kernel.org>,
Neeraj Upadhyay <Neeraj.Upadhyay@amd.com>,
Kishon Vijay Abraham I <kvijayab@amd.com>,
Alexey Kardashevskiy <aik@amd.com>,
Nikunj A Dadhania <nikunj@amd.com>,
"Peter Zijlstra (Intel)" <peterz@infradead.org>,
Kim Phillips <kim.phillips@amd.com>,
Sean Christopherson <seanjc@google.com>
Cc: linux-kernel@vger.kernel.org, linux-crypto@vger.kernel.org,
"Tycho Andersen (AMD)" <tycho@kernel.org>
Subject: [PATCH v3 3/7] x86/snp: create snp_x86_shutdown()
Date: Tue, 17 Mar 2026 10:21:53 -0600 [thread overview]
Message-ID: <20260317162157.150842-4-tycho@kernel.org> (raw)
In-Reply-To: <20260317162157.150842-1-tycho@kernel.org>
From: "Tycho Andersen (AMD)" <tycho@kernel.org>
After SNP_SHUTDOWN, two architecture-level things should be done:
1. clear the RMP table
2. disable MFDM to prevent the FW_WARN in k8_check_syscfg_dram_mod_en() in
the event of a kexec
Create and export to the CCP driver a function that does them.
Also change the MFDM helper to allow for disabling the bit, since the SNP
x86 shutdown path needs to disable MFDM. The comment for
k8_check_syscfg_dram_mod_en() notes, the "BIOS" is supposed clear it, or
the kernel in the case of module unload and shutdown followed by kexec.
Signed-off-by: Tycho Andersen (AMD) <tycho@kernel.org>
Reviewed-by: Tom Lendacky <thomas.lendacky@amd.com>
---
arch/x86/include/asm/sev.h | 2 ++
arch/x86/virt/svm/sev.c | 23 ++++++++++++++++++++---
2 files changed, 22 insertions(+), 3 deletions(-)
diff --git a/arch/x86/include/asm/sev.h b/arch/x86/include/asm/sev.h
index 0bcd89d4fe90..36d2b1ea19c0 100644
--- a/arch/x86/include/asm/sev.h
+++ b/arch/x86/include/asm/sev.h
@@ -662,6 +662,7 @@ static inline void snp_leak_pages(u64 pfn, unsigned int pages)
__snp_leak_pages(pfn, pages, true);
}
void snp_prepare_for_snp_init(void);
+void snp_x86_shutdown(void);
#else
static inline bool snp_probe_rmptable_info(void) { return false; }
static inline int snp_rmptable_init(void) { return -ENOSYS; }
@@ -679,6 +680,7 @@ static inline void snp_leak_pages(u64 pfn, unsigned int npages) {}
static inline void kdump_sev_callback(void) { }
static inline void snp_fixup_e820_tables(void) {}
static inline void snp_prepare_for_snp_init(void) {}
+static inline void snp_x86_shutdown(void) {}
#endif
#endif
diff --git a/arch/x86/virt/svm/sev.c b/arch/x86/virt/svm/sev.c
index 88cb4a548701..85091d663f18 100644
--- a/arch/x86/virt/svm/sev.c
+++ b/arch/x86/virt/svm/sev.c
@@ -132,12 +132,15 @@ static unsigned long snp_nr_leaked_pages;
#undef pr_fmt
#define pr_fmt(fmt) "SEV-SNP: " fmt
-static void mfd_enable(void *arg)
+static void mfd_reconfigure(void *arg)
{
if (!cc_platform_has(CC_ATTR_HOST_SEV_SNP))
return;
- msr_set_bit(MSR_AMD64_SYSCFG, MSR_AMD64_SYSCFG_MFDM_BIT);
+ if (arg)
+ msr_set_bit(MSR_AMD64_SYSCFG, MSR_AMD64_SYSCFG_MFDM_BIT);
+ else
+ msr_clear_bit(MSR_AMD64_SYSCFG, MSR_AMD64_SYSCFG_MFDM_BIT);
}
static void snp_enable(void *arg)
@@ -521,12 +524,26 @@ void snp_prepare_for_snp_init(void)
* MtrrFixDramModEn is not shared between threads on a core,
* therefore it must be set on all CPUs prior to enabling SNP.
*/
- on_each_cpu(mfd_enable, NULL, 1);
+ on_each_cpu(mfd_reconfigure, (void *)1, 1);
on_each_cpu(snp_enable, NULL, 1);
}
EXPORT_SYMBOL_FOR_MODULES(snp_prepare_for_snp_init, "ccp");
+void snp_x86_shutdown(void)
+{
+ u64 syscfg;
+
+ rdmsrq(MSR_AMD64_SYSCFG, syscfg);
+
+ if (syscfg & MSR_AMD64_SYSCFG_SNP_EN)
+ return;
+
+ clear_rmp();
+ on_each_cpu(mfd_reconfigure, 0, 1);
+}
+EXPORT_SYMBOL_FOR_MODULES(snp_x86_shutdown, "ccp");
+
/*
* Do the necessary preparations which are verified by the firmware as
* described in the SNP_INIT_EX firmware command description in the SNP
--
2.53.0
next prev parent reply other threads:[~2026-03-17 16:23 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-03-17 16:21 [PATCH v3 0/7] Move SNP initialization to the CCP driver Tycho Andersen
2026-03-17 16:21 ` [PATCH v3 1/7] x86/snp: Create a function to clear/zero the RMP Tycho Andersen
2026-03-17 16:21 ` [PATCH v3 2/7] x86/snp: create snp_prepare_for_snp_init() Tycho Andersen
2026-03-21 16:45 ` Borislav Petkov
2026-03-17 16:21 ` Tycho Andersen [this message]
2026-03-21 17:05 ` [PATCH v3 3/7] x86/snp: create snp_x86_shutdown() Borislav Petkov
2026-03-23 15:31 ` Tycho Andersen
2026-03-23 15:44 ` Borislav Petkov
2026-03-17 16:21 ` [PATCH v3 4/7] x86/snp, crypto: move SNP init to ccp driver Tycho Andersen
2026-03-17 16:21 ` [PATCH v3 5/7] x86/snp, crypto: move HSAVE_PA setup to arch/ Tycho Andersen
2026-03-23 15:47 ` Borislav Petkov
2026-03-17 16:21 ` [PATCH v3 6/7] crypto: ccp - implement SNP x86 shutdown Tycho Andersen
2026-03-21 8:44 ` Herbert Xu
2026-03-17 16:21 ` [PATCH v3 7/7] crypto: ccp - Update HV_FIXED page states to allow freeing of memory Tycho Andersen
2026-03-21 8:44 ` Herbert Xu
2026-03-23 15:49 ` [PATCH v3 0/7] Move SNP initialization to the CCP driver Borislav Petkov
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260317162157.150842-4-tycho@kernel.org \
--to=tycho@kernel.org \
--cc=Neeraj.Upadhyay@amd.com \
--cc=aik@amd.com \
--cc=ardb@kernel.org \
--cc=ashish.kalra@amd.com \
--cc=bp@alien8.de \
--cc=dave.hansen@linux.intel.com \
--cc=davem@davemloft.net \
--cc=herbert@gondor.apana.org.au \
--cc=hpa@zytor.com \
--cc=john.allen@amd.com \
--cc=kim.phillips@amd.com \
--cc=kvijayab@amd.com \
--cc=linux-crypto@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=nikunj@amd.com \
--cc=peterz@infradead.org \
--cc=seanjc@google.com \
--cc=tglx@kernel.org \
--cc=thomas.lendacky@amd.com \
--cc=x86@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.