mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-01 10:43:43 +00:00
x86/hyperv: Add hv_isolation_type_tdx() to detect TDX guests
No logic change to SNP/VBS guests. hv_isolation_type_tdx() will be used to instruct a TDX guest on Hyper-V to do some TDX-specific operations, e.g. for a fully enlightened TDX guest (i.e. without the paravisor), hv_do_hypercall() should use __tdx_hypercall() and such a guest on Hyper-V should handle the Hyper-V Event/Message/Monitor pages specially. Reviewed-by: Michael Kelley <mikelley@microsoft.com> Reviewed-by: Tianyu Lan <tiala@microsoft.com> Signed-off-by: Dexuan Cui <decui@microsoft.com> Signed-off-by: Wei Liu <wei.liu@kernel.org> Link: https://lore.kernel.org/r/20230824080712.30327-2-decui@microsoft.com
This commit is contained in:
parent
86e619c922
commit
08e9d12077
@ -562,3 +562,12 @@ bool hv_isolation_type_en_snp(void)
|
||||
return static_branch_unlikely(&isolation_type_en_snp);
|
||||
}
|
||||
|
||||
DEFINE_STATIC_KEY_FALSE(isolation_type_tdx);
|
||||
/*
|
||||
* hv_isolation_type_tdx - Check if the system runs in an Intel TDX based
|
||||
* isolated VM.
|
||||
*/
|
||||
bool hv_isolation_type_tdx(void)
|
||||
{
|
||||
return static_branch_unlikely(&isolation_type_tdx);
|
||||
}
|
||||
|
@ -169,7 +169,8 @@
|
||||
enum hv_isolation_type {
|
||||
HV_ISOLATION_TYPE_NONE = 0,
|
||||
HV_ISOLATION_TYPE_VBS = 1,
|
||||
HV_ISOLATION_TYPE_SNP = 2
|
||||
HV_ISOLATION_TYPE_SNP = 2,
|
||||
HV_ISOLATION_TYPE_TDX = 3
|
||||
};
|
||||
|
||||
/* Hyper-V specific model specific registers (MSRs) */
|
||||
|
@ -27,6 +27,7 @@ union hv_ghcb;
|
||||
|
||||
DECLARE_STATIC_KEY_FALSE(isolation_type_snp);
|
||||
DECLARE_STATIC_KEY_FALSE(isolation_type_en_snp);
|
||||
DECLARE_STATIC_KEY_FALSE(isolation_type_tdx);
|
||||
|
||||
typedef int (*hyperv_fill_flush_list_func)(
|
||||
struct hv_guest_mapping_flush_list *flush,
|
||||
@ -49,6 +50,8 @@ extern u64 hv_current_partition_id;
|
||||
extern union hv_ghcb * __percpu *hv_ghcb_pg;
|
||||
|
||||
extern bool hv_isolation_type_en_snp(void);
|
||||
bool hv_isolation_type_tdx(void);
|
||||
|
||||
/*
|
||||
* DEFAULT INIT GPAT and SEGMENT LIMIT value in struct VMSA
|
||||
* to start AP in enlightened SEV guest.
|
||||
|
@ -418,6 +418,8 @@ static void __init ms_hyperv_init_platform(void)
|
||||
static_branch_enable(&isolation_type_snp);
|
||||
else
|
||||
static_branch_enable(&isolation_type_en_snp);
|
||||
} else if (hv_get_isolation_type() == HV_ISOLATION_TYPE_TDX) {
|
||||
static_branch_enable(&isolation_type_tdx);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -521,6 +521,12 @@ bool __weak hv_isolation_type_en_snp(void)
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(hv_isolation_type_en_snp);
|
||||
|
||||
bool __weak hv_isolation_type_tdx(void)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(hv_isolation_type_tdx);
|
||||
|
||||
void __weak hv_setup_vmbus_handler(void (*handler)(void))
|
||||
{
|
||||
}
|
||||
|
@ -66,6 +66,7 @@ extern u64 hv_do_hypercall(u64 control, void *inputaddr, void *outputaddr);
|
||||
extern u64 hv_do_fast_hypercall8(u16 control, u64 input8);
|
||||
extern bool hv_isolation_type_snp(void);
|
||||
extern bool hv_isolation_type_en_snp(void);
|
||||
bool hv_isolation_type_tdx(void);
|
||||
|
||||
/* Helper functions that provide a consistent pattern for checking Hyper-V hypercall status. */
|
||||
static inline int hv_result(u64 status)
|
||||
|
Loading…
Reference in New Issue
Block a user