From: Dexuan Cui <decui@xxxxxxxxxxxxx> Sent: Thursday, August 24, 2023 1:07 AM > > The new variable hyperv_paravisor_present is set only when the VM > is a SNP/TDX VM with the paravisor running: see ms_hyperv_init_platform(). > > We introduce hyperv_paravisor_present because we can not use > ms_hyperv.paravisor_present in arch/x86/include/asm/mshyperv.h: > > struct ms_hyperv_info is defined in include/asm-generic/mshyperv.h, which > is included at the end of arch/x86/include/asm/mshyperv.h, but at the > beginning of arch/x86/include/asm/mshyperv.h, we would already need to use > struct ms_hyperv_info in hv_do_hypercall(). > > We use hyperv_paravisor_present only in include/asm-generic/mshyperv.h, > and use ms_hyperv.paravisor_present elsewhere. In the future, we'll > introduce a hypercall function structure for different VM types, and > at boot time, the right function pointers would be written into the > structure so that runtime testing of TDX vs. SNP vs. normal will be > avoided and hyperv_paravisor_present will no longer be needed. > > Call hv_vtom_init() when it's a VBS VM or when ms_hyperv.paravisor_present > is true, i.e. the VM is a SNP VM or TDX VM with the paravisor. > > Enhance hv_vtom_init() for a TDX VM with the paravisor. > > In hv_common_cpu_init(), don't decrypt the hyperv_pcpu_input_arg > for a TDX VM with the paravisor, just like we don't decrypt the page > for a SNP VM with the paravisor. > > Signed-off-by: Dexuan Cui <decui@xxxxxxxxxxxxx> > --- > > Changes in v2: None > > Changes in v3: > Improved the changelog > Use ms_hyperv.paravisor_present in general and only use > hyperv_paravisor_present in arch/x86/include/asm/mshyperv.h > Fixed the build when CONFIG_AMD_MEM_ENCRYPT and/or > CONFIG_INTEL_TDX_GUEST are not set. > Updated arch/x86/include/asm/mshyperv.h accordingly > hv_vtom_init(): Fixed/added the comments > Handled the TDX special case directly in vmbus_set_event(). > > arch/x86/hyperv/hv_init.c | 4 ++-- > arch/x86/hyperv/ivm.c | 38 ++++++++++++++++++++++++++++++--- > arch/x86/include/asm/mshyperv.h | 15 ++++++++----- > arch/x86/kernel/cpu/mshyperv.c | 9 ++++++-- > drivers/hv/connection.c | 15 +++++++++---- > drivers/hv/hv.c | 10 ++++----- > drivers/hv/hv_common.c | 3 ++- > 7 files changed, 72 insertions(+), 22 deletions(-) Reviewed-by: Michael Kelley <mikelley@xxxxxxxxxxxxx>