* [PATCH v3 0/2] Skip SNP initialization if CPUs are offlined
@ 2026-04-09 19:56 Tycho Andersen
2026-04-09 19:56 ` [PATCH v3 1/2] x86/sev: Do not initialize SNP if missing CPUs Tycho Andersen
2026-04-09 19:56 ` [PATCH v3 2/2] crypto/ccp: Skip SNP_INIT if preparation fails Tycho Andersen
0 siblings, 2 replies; 3+ messages in thread
From: Tycho Andersen @ 2026-04-09 19:56 UTC (permalink / raw)
To: Thomas Gleixner, Ingo Molnar, Borislav Petkov, Dave Hansen, x86,
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, linux-crypto, Tycho Andersen (AMD)
From: "Tycho Andersen (AMD)" <tycho@kernel.org>
Changes are:
* add some newlines
* move error setting into cpumask check
* head off AI review complaints by adding the note about SNP failing all
initialization previously to commit message of patch two
* drop mention of reasons for snp_prepare() failure from commit message
of patch two
* carry review tags as appropriate
v2 is here: https://lore.kernel.org/all/20260407174713.439474-1-tycho@kernel.org/
Tycho Andersen (AMD) (2):
x86/sev: Do not initialize SNP if missing CPUs
crypto/ccp: Skip SNP_INIT if preparation fails
arch/x86/include/asm/sev.h | 4 ++--
arch/x86/virt/svm/sev.c | 18 ++++++++++++++++--
drivers/crypto/ccp/sev-dev.c | 4 +++-
3 files changed, 21 insertions(+), 5 deletions(-)
base-commit: 6c927e5ca9d238f8ae40b453a8382eb9cf4ee855
--
2.53.0
^ permalink raw reply [flat|nested] 3+ messages in thread
* [PATCH v3 1/2] x86/sev: Do not initialize SNP if missing CPUs
2026-04-09 19:56 [PATCH v3 0/2] Skip SNP initialization if CPUs are offlined Tycho Andersen
@ 2026-04-09 19:56 ` Tycho Andersen
2026-04-09 19:56 ` [PATCH v3 2/2] crypto/ccp: Skip SNP_INIT if preparation fails Tycho Andersen
1 sibling, 0 replies; 3+ messages in thread
From: Tycho Andersen @ 2026-04-09 19:56 UTC (permalink / raw)
To: Thomas Gleixner, Ingo Molnar, Borislav Petkov, Dave Hansen, x86,
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, linux-crypto, Tycho Andersen (AMD), Tom Lendacky
From: "Tycho Andersen (AMD)" <tycho@kernel.org>
The SEV firmware checks that the SNP enable bit is set on each CPU during
SNP initialization, and will fail if it is not. If there are some CPUs
offline, they will not run the setup functions, so SNP initialization will
always fail.
Skip the IPIs in this case and return an error so that the CCP driver can
skip the SNP_INIT that will fail. Also print the CPU masks as a breadcrumb
so people can figure out what happened.
Suggested-by: Borislav Petkov (AMD) <bp@alien8.de>
Signed-off-by: Tycho Andersen (AMD) <tycho@kernel.org>
Reviewed-by: Nikunj A Dadhania <nikunj@amd.com>
Reviewed-by: Tom Lendacky <thomas.lendacky@gmail.com>
---
arch/x86/include/asm/sev.h | 4 ++--
arch/x86/virt/svm/sev.c | 18 ++++++++++++++++--
2 files changed, 18 insertions(+), 4 deletions(-)
diff --git a/arch/x86/include/asm/sev.h b/arch/x86/include/asm/sev.h
index 09e605c85de4..594cfa19cbd4 100644
--- a/arch/x86/include/asm/sev.h
+++ b/arch/x86/include/asm/sev.h
@@ -661,7 +661,7 @@ static inline void snp_leak_pages(u64 pfn, unsigned int pages)
{
__snp_leak_pages(pfn, pages, true);
}
-void snp_prepare(void);
+int snp_prepare(void);
void snp_shutdown(void);
#else
static inline bool snp_probe_rmptable_info(void) { return false; }
@@ -679,7 +679,7 @@ static inline void __snp_leak_pages(u64 pfn, unsigned int npages, bool dump_rmp)
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(void) {}
+static inline int snp_prepare(void) { return -ENODEV; }
static inline void snp_shutdown(void) {}
#endif
diff --git a/arch/x86/virt/svm/sev.c b/arch/x86/virt/svm/sev.c
index 41f76f15caa1..95e5127816dc 100644
--- a/arch/x86/virt/svm/sev.c
+++ b/arch/x86/virt/svm/sev.c
@@ -511,8 +511,9 @@ static void clear_hsave_pa(void *arg)
wrmsrq(MSR_VM_HSAVE_PA, 0);
}
-void snp_prepare(void)
+int snp_prepare(void)
{
+ int ret;
u64 val;
/*
@@ -521,12 +522,20 @@ void snp_prepare(void)
*/
rdmsrq(MSR_AMD64_SYSCFG, val);
if (val & MSR_AMD64_SYSCFG_SNP_EN)
- return;
+ return 0;
clear_rmp();
cpus_read_lock();
+ if (!cpumask_equal(cpu_online_mask, cpu_present_mask)) {
+ ret = -EOPNOTSUPP;
+ pr_warn("Skipping SNP initialization. CPUs online %*pbl, present %*pbl\n",
+ cpumask_pr_args(cpu_online_mask),
+ cpumask_pr_args(cpu_present_mask));
+ goto unlock;
+ }
+
/*
* MtrrFixDramModEn is not shared between threads on a core,
* therefore it must be set on all CPUs prior to enabling SNP.
@@ -537,7 +546,12 @@ void snp_prepare(void)
/* SNP_INIT requires MSR_VM_HSAVE_PA to be cleared on all CPUs. */
on_each_cpu(clear_hsave_pa, NULL, 1);
+ ret = 0;
+
+unlock:
cpus_read_unlock();
+
+ return ret;
}
EXPORT_SYMBOL_FOR_MODULES(snp_prepare, "ccp");
--
2.53.0
^ permalink raw reply related [flat|nested] 3+ messages in thread
* [PATCH v3 2/2] crypto/ccp: Skip SNP_INIT if preparation fails
2026-04-09 19:56 [PATCH v3 0/2] Skip SNP initialization if CPUs are offlined Tycho Andersen
2026-04-09 19:56 ` [PATCH v3 1/2] x86/sev: Do not initialize SNP if missing CPUs Tycho Andersen
@ 2026-04-09 19:56 ` Tycho Andersen
1 sibling, 0 replies; 3+ messages in thread
From: Tycho Andersen @ 2026-04-09 19:56 UTC (permalink / raw)
To: Thomas Gleixner, Ingo Molnar, Borislav Petkov, Dave Hansen, x86,
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, linux-crypto, Tycho Andersen (AMD)
From: "Tycho Andersen (AMD)" <tycho@kernel.org>
If snp_prepare() failed SNP_INIT will fail, so skip it and return early.
Note that this is not a change in initialization behavior: if SNP_INIT
failed before this patch, it will still return an error
__sev_snp_init_locked() and fail initialization of other SEV modes.
Signed-off-by: Tycho Andersen (AMD) <tycho@kernel.org>
Reviewed-by: Nikunj A Dadhania <nikunj@amd.com>
---
drivers/crypto/ccp/sev-dev.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/drivers/crypto/ccp/sev-dev.c b/drivers/crypto/ccp/sev-dev.c
index 939fa8aa155c..a37922d3d230 100644
--- a/drivers/crypto/ccp/sev-dev.c
+++ b/drivers/crypto/ccp/sev-dev.c
@@ -1374,7 +1374,9 @@ static int __sev_snp_init_locked(int *error, unsigned int max_snp_asid)
return -EOPNOTSUPP;
}
- snp_prepare();
+ rc = snp_prepare();
+ if (rc)
+ return rc;
/*
* Starting in SNP firmware v1.52, the SNP_INIT_EX command takes a list
--
2.53.0
^ permalink raw reply related [flat|nested] 3+ messages in thread
end of thread, other threads:[~2026-04-09 19:56 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-04-09 19:56 [PATCH v3 0/2] Skip SNP initialization if CPUs are offlined Tycho Andersen
2026-04-09 19:56 ` [PATCH v3 1/2] x86/sev: Do not initialize SNP if missing CPUs Tycho Andersen
2026-04-09 19:56 ` [PATCH v3 2/2] crypto/ccp: Skip SNP_INIT if preparation fails Tycho Andersen
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox