From: Jinank Jain <jinankjain@xxxxxxxxxxxxxxxxxxx> Sent: Wednesday, November 2, 2022 9:36 AM > The email subject prefix for a patch like this is usually "x86/hyperv" Check the commit log for arch/x86/kernel/cpu/mshyperv.c, and you'll see what is usually done. It's best to maintain consistency. Same comment applies to other patches in this series: Check the commit log for the relevant files and pick the prefix that fits best. > When Linux runs as a root partition for Microsoft Hypervisor. It is > possible to detect if it is running as nested hypervisor using > hints exposed by mshv. While at it expose a new variable called > hv_nested which can be used later for making decisions specific to > nested use case. > > Signed-off-by: Jinank Jain <jinankjain@xxxxxxxxxxxxxxxxxxx> > --- > arch/x86/include/asm/hyperv-tlfs.h | 3 +++ > arch/x86/include/asm/mshyperv.h | 2 ++ > arch/x86/kernel/cpu/mshyperv.c | 7 +++++++ > 3 files changed, 12 insertions(+) > > diff --git a/arch/x86/include/asm/hyperv-tlfs.h b/arch/x86/include/asm/hyperv-tlfs.h > index 3089ec352743..d9a611565859 100644 > --- a/arch/x86/include/asm/hyperv-tlfs.h > +++ b/arch/x86/include/asm/hyperv-tlfs.h > @@ -114,6 +114,9 @@ > /* Recommend using the newer ExProcessorMasks interface */ > #define HV_X64_EX_PROCESSOR_MASKS_RECOMMENDED BIT(11) > > +/* Indicates that the hypervisor is nested within a Hyper-V partition. */ > +#define HV_X64_HYPERV_NESTED BIT(12) > + > /* Recommend using enlightened VMCS */ > #define HV_X64_ENLIGHTENED_VMCS_RECOMMENDED BIT(14) > > diff --git a/arch/x86/include/asm/mshyperv.h b/arch/x86/include/asm/mshyperv.h > index 61f0c206bff0..29388567eafd 100644 > --- a/arch/x86/include/asm/mshyperv.h > +++ b/arch/x86/include/asm/mshyperv.h > @@ -190,6 +190,8 @@ static inline void hv_ghcb_terminate(unsigned int set, unsigned int reason) {} > > extern bool hv_isolation_type_snp(void); > > +extern bool hv_nested; > + > static inline bool hv_is_synic_reg(unsigned int reg) > { > if ((reg >= HV_REGISTER_SCONTROL) && > diff --git a/arch/x86/kernel/cpu/mshyperv.c b/arch/x86/kernel/cpu/mshyperv.c > index 831613959a92..2555535f5237 100644 > --- a/arch/x86/kernel/cpu/mshyperv.c > +++ b/arch/x86/kernel/cpu/mshyperv.c > @@ -37,6 +37,8 @@ > > /* Is Linux running as the root partition? */ > bool hv_root_partition; > +/* Is Linux running on nested Microsoft Hypervisor */ > +bool hv_nested; > struct ms_hyperv_info ms_hyperv; > > #if IS_ENABLED(CONFIG_HYPERV) > @@ -301,6 +303,11 @@ static void __init ms_hyperv_init_platform(void) > pr_info("Hyper-V: running as root partition\n"); > } > > + if (ms_hyperv.hints & HV_X64_HYPERV_NESTED) { > + hv_nested = true; This reference to hv_nested will cause problems similar to what happens with hv_root_partition. See the comments in hv_common.c about how hv_root_partition is handled. I think you'll need to do the same thing with hv_nested. > + pr_info("Hyper-V: Linux running on a nested hypervisor\n"); A nit: Let's drop the word "Linux" from the above message so it is consistent with the previous message about "running as root partition". > + } > + > /* > * Extract host information. > */ > -- > 2.25.1