Commit 08e9d120 authored by Dexuan Cui's avatar Dexuan Cui Committed by Wei Liu
Browse files

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: default avatarMichael Kelley <mikelley@microsoft.com>
Reviewed-by: default avatarTianyu Lan <tiala@microsoft.com>
Signed-off-by: default avatarDexuan Cui <decui@microsoft.com>
Signed-off-by: default avatarWei Liu <wei.liu@kernel.org>
Link: https://lore.kernel.org/r/20230824080712.30327-2-decui@microsoft.com
parent 86e619c9
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -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);
}
+2 −1
Original line number Diff line number Diff line
@@ -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) */
+3 −0
Original line number Diff line number Diff line
@@ -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.
+2 −0
Original line number Diff line number Diff line
@@ -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);
		}
	}

+6 −0
Original line number Diff line number Diff line
@@ -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))
{
}
Loading