On Tue, May 25, 2021 at 09:47:24AM -0500, Brijesh Singh wrote: > Maybe I should have said, its not applicable in the decompressed path. Aha, ok. How's that, ontop of yours: --- diff --git a/arch/x86/boot/compressed/sev.c b/arch/x86/boot/compressed/sev.c index 07b9529d7d95..c9dd98b9dcdf 100644 --- a/arch/x86/boot/compressed/sev.c +++ b/arch/x86/boot/compressed/sev.c @@ -208,7 +208,7 @@ static bool early_setup_sev_es(void) /* SEV-SNP guest requires the GHCB GPA must be registered */ if (sev_snp_enabled()) - snp_register_ghcb(__pa(&boot_ghcb_page)); + snp_register_ghcb_early(__pa(&boot_ghcb_page)); return true; } diff --git a/arch/x86/kernel/sev-shared.c b/arch/x86/kernel/sev-shared.c index 37a23c524f8c..7200f44d6b6b 100644 --- a/arch/x86/kernel/sev-shared.c +++ b/arch/x86/kernel/sev-shared.c @@ -81,7 +81,7 @@ static bool ghcb_get_hv_features(void) return true; } -static void snp_register_ghcb(unsigned long paddr) +static void snp_register_ghcb_early(unsigned long paddr) { unsigned long pfn = paddr >> PAGE_SHIFT; u64 val; diff --git a/arch/x86/kernel/sev.c b/arch/x86/kernel/sev.c index 5544557d9fb6..144c20479cae 100644 --- a/arch/x86/kernel/sev.c +++ b/arch/x86/kernel/sev.c @@ -108,7 +108,18 @@ DEFINE_STATIC_KEY_FALSE(sev_es_enable_key); void do_early_exception(struct pt_regs *regs, int trapnr); /* Defined in sev-shared.c */ -static void snp_register_ghcb(unsigned long paddr); +static void snp_register_ghcb_early(unsigned long paddr); + +static void snp_register_ghcb(struct sev_es_runtime_data *data, + unsigned long paddr) +{ + if (data->snp_ghcb_registered) + return; + + snp_register_ghcb_early(paddr); + + data->snp_ghcb_registered = true; +} static void __init setup_vc_stacks(int cpu) { @@ -239,10 +250,8 @@ static __always_inline struct ghcb *sev_es_get_ghcb(struct ghcb_state *state) } /* SEV-SNP guest requires that GHCB must be registered before using it. */ - if (sev_snp_active() && !data->snp_ghcb_registered) { - snp_register_ghcb(__pa(ghcb)); - data->snp_ghcb_registered = true; - } + if (sev_snp_active()) + snp_register_ghcb(data, __pa(ghcb)); return ghcb; } @@ -681,7 +690,7 @@ static bool __init sev_es_setup_ghcb(void) /* SEV-SNP guest requires that GHCB GPA must be registered */ if (sev_snp_active()) - snp_register_ghcb(__pa(&boot_ghcb_page)); + snp_register_ghcb_early(__pa(&boot_ghcb_page)); return true; } -- Regards/Gruss, Boris. https://people.kernel.org/tglx/notes-about-netiquette