On Thu, Apr 06, 2023 at 06:51:13AM -0700, Stanislav Kinsburskii wrote: > On Tue, Apr 04, 2023 at 02:01:01AM -0700, Saurabh Sengar wrote: > > Add structs and hypercalls required to enable VTL support on x86. > > > > Signed-off-by: Saurabh Sengar <ssengar@xxxxxxxxxxxxxxxxxxx> > > Reviewed-by: Michael Kelley <mikelley@xxxxxxxxxxxxx> > > --- > > arch/x86/include/asm/hyperv-tlfs.h | 75 ++++++++++++++++++++++++++++++ > > include/asm-generic/hyperv-tlfs.h | 4 ++ > > 2 files changed, 79 insertions(+) > > > > diff --git a/arch/x86/include/asm/hyperv-tlfs.h b/arch/x86/include/asm/hyperv-tlfs.h > > index 0b73a809e9e1..0b0b4e9a4318 100644 > > --- a/arch/x86/include/asm/hyperv-tlfs.h > > +++ b/arch/x86/include/asm/hyperv-tlfs.h > > @@ -713,6 +713,81 @@ union hv_msi_entry { > > } __packed; > > }; > > > > +struct hv_x64_segment_register { > > + __u64 base; > > Ideally they arch-size types naming should be consistent: either with underscores or > without. > The majority of cases in this file are without underscores. Although I am fine either way, I think in a non-uapi file "without underscore" is prefered. I can change this in next version. Regards, Saurabh > > Reviewed-by: Stanislav Kinsburskii <stanislav.kinsburskii@xxxxxxxxx> > > > + __u32 limit; > > + __u16 selector; > > + union { > > + struct { > > + __u16 segment_type : 4; > > + __u16 non_system_segment : 1; > > + __u16 descriptor_privilege_level : 2; > > + __u16 present : 1; > > + __u16 reserved : 4; > > + __u16 available : 1; > > + __u16 _long : 1; > > + __u16 _default : 1; > > + __u16 granularity : 1; > > + } __packed; > > + __u16 attributes; > > + }; > > +} __packed; > > + > > +struct hv_x64_table_register { > > + __u16 pad[3]; > > + __u16 limit; > > + __u64 base; > > +} __packed; > > + > > +struct hv_init_vp_context { > > + u64 rip; > > + u64 rsp; > > + u64 rflags; > > + > > + struct hv_x64_segment_register cs; > > + struct hv_x64_segment_register ds; > > + struct hv_x64_segment_register es; > > + struct hv_x64_segment_register fs; > > + struct hv_x64_segment_register gs; > > + struct hv_x64_segment_register ss; > > + struct hv_x64_segment_register tr; > > + struct hv_x64_segment_register ldtr; > > + > > + struct hv_x64_table_register idtr; > > + struct hv_x64_table_register gdtr; > > + > > + u64 efer; > > + u64 cr0; > > + u64 cr3; > > + u64 cr4; > > + u64 msr_cr_pat; > > +} __packed; > > + > > +union hv_input_vtl { > > + u8 as_uint8; > > + struct { > > + u8 target_vtl: 4; > > + u8 use_target_vtl: 1; > > + u8 reserved_z: 3; > > + }; > > +} __packed; > > + > > +struct hv_enable_vp_vtl { > > + u64 partition_id; > > + u32 vp_index; > > + union hv_input_vtl target_vtl; > > + u8 mbz0; > > + u16 mbz1; > > + struct hv_init_vp_context vp_context; > > +} __packed; > > + > > +struct hv_get_vp_from_apic_id_in { > > + u64 partition_id; > > + union hv_input_vtl target_vtl; > > + u8 res[7]; > > + u32 apic_ids[]; > > +} __packed; > > + > > #include <asm-generic/hyperv-tlfs.h> > > > > #endif > > diff --git a/include/asm-generic/hyperv-tlfs.h b/include/asm-generic/hyperv-tlfs.h > > index b870983596b9..87258341fd7c 100644 > > --- a/include/asm-generic/hyperv-tlfs.h > > +++ b/include/asm-generic/hyperv-tlfs.h > > @@ -146,6 +146,7 @@ union hv_reference_tsc_msr { > > /* Declare the various hypercall operations. */ > > #define HVCALL_FLUSH_VIRTUAL_ADDRESS_SPACE 0x0002 > > #define HVCALL_FLUSH_VIRTUAL_ADDRESS_LIST 0x0003 > > +#define HVCALL_ENABLE_VP_VTL 0x000f > > #define HVCALL_NOTIFY_LONG_SPIN_WAIT 0x0008 > > #define HVCALL_SEND_IPI 0x000b > > #define HVCALL_FLUSH_VIRTUAL_ADDRESS_SPACE_EX 0x0013 > > @@ -165,6 +166,8 @@ union hv_reference_tsc_msr { > > #define HVCALL_MAP_DEVICE_INTERRUPT 0x007c > > #define HVCALL_UNMAP_DEVICE_INTERRUPT 0x007d > > #define HVCALL_RETARGET_INTERRUPT 0x007e > > +#define HVCALL_START_VP 0x0099 > > +#define HVCALL_GET_VP_ID_FROM_APIC_ID 0x009a > > #define HVCALL_FLUSH_GUEST_PHYSICAL_ADDRESS_SPACE 0x00af > > #define HVCALL_FLUSH_GUEST_PHYSICAL_ADDRESS_LIST 0x00b0 > > #define HVCALL_MODIFY_SPARSE_GPA_PAGE_HOST_VISIBILITY 0x00db > > @@ -218,6 +221,7 @@ enum HV_GENERIC_SET_FORMAT { > > #define HV_STATUS_INVALID_PORT_ID 17 > > #define HV_STATUS_INVALID_CONNECTION_ID 18 > > #define HV_STATUS_INSUFFICIENT_BUFFERS 19 > > +#define HV_STATUS_VTL_ALREADY_ENABLED 134 > > > > /* > > * The Hyper-V TimeRefCount register and the TSC > > -- > > 2.34.1