On 5/26/21 4:57 AM, Borislav Petkov wrote: > 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: Sure, its fine with me. I will apply this change. -Birjesh > --- > 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; > } >