• Dexuan Cui's avatar
    x86/hyperv: Introduce a global variable hyperv_paravisor_present · d3a9d7e4
    Dexuan Cui authored
    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: default avatarDexuan Cui <decui@microsoft.com>
    Reviewed-by: default avatarTianyu Lan <tiala@microsoft.com>
    Reviewed-by: default avatarMichael Kelley <mikelley@microsoft.com>
    Signed-off-by: default avatarWei Liu <wei.liu@kernel.org>
    Link: https://lore.kernel.org/r/20230824080712.30327-7-decui@microsoft.com
    d3a9d7e4
ivm.c 14.9 KB