[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20231108061413.GAZUsnNVcmYZNMw2Kr@fat_crate.local>
Date: Wed, 8 Nov 2023 07:14:13 +0100
From: Borislav Petkov <bp@...en8.de>
To: "Kalra, Ashish" <ashish.kalra@....com>
Cc: Michael Roth <michael.roth@....com>, kvm@...r.kernel.org,
linux-coco@...ts.linux.dev, linux-mm@...ck.org,
linux-crypto@...r.kernel.org, x86@...nel.org,
linux-kernel@...r.kernel.org, tglx@...utronix.de, mingo@...hat.com,
jroedel@...e.de, thomas.lendacky@....com, hpa@...or.com,
ardb@...nel.org, pbonzini@...hat.com, seanjc@...gle.com,
vkuznets@...hat.com, jmattson@...gle.com, luto@...nel.org,
dave.hansen@...ux.intel.com, slp@...hat.com, pgonda@...gle.com,
peterz@...radead.org, srinivas.pandruvada@...ux.intel.com,
rientjes@...gle.com, dovmurik@...ux.ibm.com, tobin@....com,
vbabka@...e.cz, kirill@...temov.name, ak@...ux.intel.com,
tony.luck@...el.com, marcorr@...gle.com,
sathyanarayanan.kuppuswamy@...ux.intel.com, alpergun@...gle.com,
jarkko@...nel.org, nikunj.dadhania@....com, pankaj.gupta@....com,
liam.merwick@...cle.com, zhi.a.wang@...el.com,
Brijesh Singh <brijesh.singh@....com>
Subject: Re: [PATCH v10 06/50] x86/sev: Add the host SEV-SNP initialization
support
On Tue, Nov 07, 2023 at 04:33:41PM -0600, Kalra, Ashish wrote:
> We will still need some method to tell the IOMMU driver if SNP
> support/feature is disabled by this function, for example, when CPU family
> and model is not supported by SNP and we jump to no_snp label.
See below.
> The reliable way for this to work is to ensure snp_rmptable_init() is called
> before IOMMU initialization and then IOMMU initialization depends on SNP
> feature flag setup by snp_rmptable_init() to enable SNP support on IOMMU or
> not.
Yes, this whole SNP initialization needs to be reworked and split this
way:
- early detection work which needs to be done once goes to
bsp_init_amd(): that's basically your early_detect_mem_encrypt() stuff
which needs to happen exactly only once and early.
- Any work like:
c->x86_phys_bits -= (cpuid_ebx(0x8000001f) >> 6) & 0x3f;
and the like which needs to happen on each AP, gets put in a function
which gets called by init_amd().
By the time IOMMU gets to init, you already know whether it should
enable SNP and check X86_FEATURE_SEV_SNP.
Finally, you call __snp_rmptable_init() which does the *per-CPU* init
work which is still pending.
Ok?
Ontop of the previous ontop patch:
---
diff --git a/arch/x86/kernel/cpu/amd.c b/arch/x86/kernel/cpu/amd.c
index 6cc2074fcea3..a9c95e5d6b06 100644
--- a/arch/x86/kernel/cpu/amd.c
+++ b/arch/x86/kernel/cpu/amd.c
@@ -674,8 +674,19 @@ static void early_detect_mem_encrypt(struct cpuinfo_x86 *c)
if (!(msr & MSR_K7_HWCR_SMMLOCK))
goto clear_sev;
- if (cpu_has(c, X86_FEATURE_SEV_SNP) && !early_rmptable_check())
- goto clear_snp;
+ if (cpu_has(c, X86_FEATURE_SEV_SNP)) {
+ /*
+ * RMP table entry format is not architectural and it can vary by processor
+ * and is defined by the per-processor PPR. Restrict SNP support on the known
+ * CPU model and family for which the RMP table entry format is currently
+ * defined for.
+ */
+ if (c->x86 != 0x19 || c->x86_model > 0xaf)
+ goto clear_snp;
+
+ if (!early_rmptable_check())
+ goto clear_snp;
+ }
return;
diff --git a/arch/x86/virt/svm/sev.c b/arch/x86/virt/svm/sev.c
index 9237c327ad6d..5a71df9ae4cb 100644
--- a/arch/x86/virt/svm/sev.c
+++ b/arch/x86/virt/svm/sev.c
@@ -199,14 +199,6 @@ static int __init snp_rmptable_init(void)
if (!amd_iommu_snp_en)
return 0;
- /*
- * RMP table entry format is not architectural and it can vary by processor and
- * is defined by the per-processor PPR. Restrict SNP support on the known CPU
- * model and family for which the RMP table entry format is currently defined for.
- */
- if (boot_cpu_data.x86 != 0x19 || boot_cpu_data.x86_model > 0xaf)
- goto nosnp;
-
if (__snp_rmptable_init())
goto nosnp;
--
Regards/Gruss,
Boris.
https://people.kernel.org/tglx/notes-about-netiquette
Powered by blists - more mailing lists