diff options
Diffstat (limited to 'arch/x86/include/asm/hyperv-tlfs.h')
| -rw-r--r-- | arch/x86/include/asm/hyperv-tlfs.h | 43 | 
1 files changed, 37 insertions, 6 deletions
diff --git a/arch/x86/include/asm/hyperv-tlfs.h b/arch/x86/include/asm/hyperv-tlfs.h index af78cd72b8f3..7741e211f7f5 100644 --- a/arch/x86/include/asm/hyperv-tlfs.h +++ b/arch/x86/include/asm/hyperv-tlfs.h @@ -13,6 +13,16 @@  #include <asm/page.h>  /* + * While not explicitly listed in the TLFS, Hyper-V always runs with a page size + * of 4096. These definitions are used when communicating with Hyper-V using + * guest physical pages and guest physical page addresses, since the guest page + * size may not be 4096 on all architectures. + */ +#define HV_HYP_PAGE_SHIFT      12 +#define HV_HYP_PAGE_SIZE       BIT(HV_HYP_PAGE_SHIFT) +#define HV_HYP_PAGE_MASK       (~(HV_HYP_PAGE_SIZE - 1)) + +/*   * The below CPUID leaves are present if VersionAndFeatures.HypervisorPresent   * is set by CPUID(HvCpuIdFunctionVersionAndFeatures).   */ @@ -170,7 +180,15 @@  /* Recommend using enlightened VMCS */  #define HV_X64_ENLIGHTENED_VMCS_RECOMMENDED		BIT(14) +/* + * Virtual processor will never share a physical core with another virtual + * processor, except for virtual processors that are reported as sibling SMT + * threads. + */ +#define HV_X64_NO_NONARCH_CORESHARING                  BIT(18) +  /* Nested features. These are HYPERV_CPUID_NESTED_FEATURES.EAX bits. */ +#define HV_X64_NESTED_DIRECT_FLUSH			BIT(17)  #define HV_X64_NESTED_GUEST_MAPPING_FLUSH		BIT(18)  #define HV_X64_NESTED_MSR_BITMAP			BIT(19) @@ -514,14 +532,24 @@ struct hv_timer_message_payload {  	__u64 delivery_time;	/* When the message was delivered */  } __packed; +struct hv_nested_enlightenments_control { +	struct { +		__u32 directhypercall:1; +		__u32 reserved:31; +	} features; +	struct { +		__u32 reserved; +	} hypercallControls; +} __packed; +  /* Define virtual processor assist page structure. */  struct hv_vp_assist_page {  	__u32 apic_assist; -	__u32 reserved; -	__u64 vtl_control[2]; -	__u64 nested_enlightenments_control[2]; -	__u32 enlighten_vmentry; -	__u32 padding; +	__u32 reserved1; +	__u64 vtl_control[3]; +	struct hv_nested_enlightenments_control nested_control; +	__u8 enlighten_vmentry; +	__u8 reserved2[7];  	__u64 current_nested_vmcs;  } __packed; @@ -847,7 +875,7 @@ union hv_gpa_page_range {   * count is equal with how many entries of union hv_gpa_page_range can   * be populated into the input parameter page.   */ -#define HV_MAX_FLUSH_REP_COUNT ((PAGE_SIZE - 2 * sizeof(u64)) /	\ +#define HV_MAX_FLUSH_REP_COUNT ((HV_HYP_PAGE_SIZE - 2 * sizeof(u64)) /	\  				sizeof(union hv_gpa_page_range))  struct hv_guest_mapping_flush_list { @@ -872,4 +900,7 @@ struct hv_tlb_flush_ex {  	u64 gva_list[];  } __packed; +struct hv_partition_assist_pg { +	u32 tlb_lock_count; +};  #endif  |