From: Tianyu Lan <ltykernel@xxxxxxxxx> Sent: Monday, July 17, 2023 8:23 PM > > Introduce static key isolation_type_en_snp for enlightened > sev-snp guest check. > > Signed-off-by: Tianyu Lan <tiala@xxxxxxxxxxxxx> > --- > arch/x86/hyperv/ivm.c | 11 +++++++++++ > arch/x86/include/asm/mshyperv.h | 3 +++ > arch/x86/kernel/cpu/mshyperv.c | 9 +++++++-- > drivers/hv/hv_common.c | 6 ++++++ > include/asm-generic/mshyperv.h | 12 +++++++++--- > 5 files changed, 36 insertions(+), 5 deletions(-) > > diff --git a/arch/x86/hyperv/ivm.c b/arch/x86/hyperv/ivm.c > index 14f46ad2ca64..b2b5cb19fac9 100644 > --- a/arch/x86/hyperv/ivm.c > +++ b/arch/x86/hyperv/ivm.c > @@ -413,3 +413,14 @@ bool hv_isolation_type_snp(void) > { > return static_branch_unlikely(&isolation_type_snp); > } > + > +DEFINE_STATIC_KEY_FALSE(isolation_type_en_snp); > +/* > + * hv_isolation_type_en_snp - Check system runs in the AMD SEV-SNP based > + * isolation enlightened VM. > + */ > +bool hv_isolation_type_en_snp(void) > +{ > + return static_branch_unlikely(&isolation_type_en_snp); > +} > + > diff --git a/arch/x86/include/asm/mshyperv.h b/arch/x86/include/asm/mshyperv.h > index 88d9ef98e087..2fa38e9f6207 100644 > --- a/arch/x86/include/asm/mshyperv.h > +++ b/arch/x86/include/asm/mshyperv.h > @@ -26,6 +26,7 @@ > union hv_ghcb; > > DECLARE_STATIC_KEY_FALSE(isolation_type_snp); > +DECLARE_STATIC_KEY_FALSE(isolation_type_en_snp); > > typedef int (*hyperv_fill_flush_list_func)( > struct hv_guest_mapping_flush_list *flush, > @@ -45,6 +46,8 @@ extern void *hv_hypercall_pg; > > extern u64 hv_current_partition_id; > > +extern bool hv_isolation_type_en_snp(void); > + > extern union hv_ghcb * __percpu *hv_ghcb_pg; > > int hv_call_deposit_pages(int node, u64 partition_id, u32 num_pages); > diff --git a/arch/x86/kernel/cpu/mshyperv.c b/arch/x86/kernel/cpu/mshyperv.c > index c7969e806c64..5398fb2f4d39 100644 > --- a/arch/x86/kernel/cpu/mshyperv.c > +++ b/arch/x86/kernel/cpu/mshyperv.c > @@ -402,8 +402,12 @@ static void __init ms_hyperv_init_platform(void) > pr_info("Hyper-V: Isolation Config: Group A 0x%x, Group B 0x%x\n", > ms_hyperv.isolation_config_a, ms_hyperv.isolation_config_b); > > - if (hv_get_isolation_type() == HV_ISOLATION_TYPE_SNP) > + > + if (cc_platform_has(CC_ATTR_GUEST_SEV_SNP)) { > + static_branch_enable(&isolation_type_en_snp); > + } else if (hv_get_isolation_type() == HV_ISOLATION_TYPE_SNP) { > static_branch_enable(&isolation_type_snp); > + } > } > > if (hv_max_functions_eax >= HYPERV_CPUID_NESTED_FEATURES) { > @@ -473,7 +477,8 @@ static void __init ms_hyperv_init_platform(void) > > #if IS_ENABLED(CONFIG_HYPERV) > if ((hv_get_isolation_type() == HV_ISOLATION_TYPE_VBS) || > - (hv_get_isolation_type() == HV_ISOLATION_TYPE_SNP)) > + ((hv_get_isolation_type() == HV_ISOLATION_TYPE_SNP) && > + ms_hyperv.paravisor_present)) > hv_vtom_init(); > /* > * Setup the hook to get control post apic initialization. > diff --git a/drivers/hv/hv_common.c b/drivers/hv/hv_common.c > index 542a1d53b303..4b4aa53c34c2 100644 > --- a/drivers/hv/hv_common.c > +++ b/drivers/hv/hv_common.c > @@ -502,6 +502,12 @@ bool __weak hv_isolation_type_snp(void) > } > EXPORT_SYMBOL_GPL(hv_isolation_type_snp); > > +bool __weak hv_isolation_type_en_snp(void) > +{ > + return false; > +} > +EXPORT_SYMBOL_GPL(hv_isolation_type_en_snp); > + > void __weak hv_setup_vmbus_handler(void (*handler)(void)) > { > } > diff --git a/include/asm-generic/mshyperv.h b/include/asm-generic/mshyperv.h > index 402a8c1c202d..6b5c41f90398 100644 > --- a/include/asm-generic/mshyperv.h > +++ b/include/asm-generic/mshyperv.h > @@ -36,15 +36,21 @@ struct ms_hyperv_info { > u32 nested_features; > u32 max_vp_index; > u32 max_lp_index; > - u32 isolation_config_a; > + union { > + u32 isolation_config_a; > + struct { > + u32 paravisor_present : 1; > + u32 reserved_a1 : 31; > + }; > + }; > union { > u32 isolation_config_b; > struct { > u32 cvm_type : 4; > - u32 reserved1 : 1; > + u32 reserved_b1 : 1; > u32 shared_gpa_boundary_active : 1; > u32 shared_gpa_boundary_bits : 6; > - u32 reserved2 : 20; > + u32 reserved_b2 : 20; > }; > }; > u64 shared_gpa_boundary; > -- > 2.25.1 Reviewed-by: Michael Kelley <mikelley@xxxxxxxxxxxxx>