> -----Original Message----- > From: Saurabh Singh Sengar <ssengar@xxxxxxxxxxxxxxxxxxx> > Sent: Saturday, April 8, 2023 9:58 AM > To: Stanislav Kinsburskii <skinsburskii@xxxxxxxxxxxxxxxxxxx> > Cc: tglx@xxxxxxxxxxxxx; mingo@xxxxxxxxxx; bp@xxxxxxxxx; > dave.hansen@xxxxxxxxxxxxxxx; x86@xxxxxxxxxx; hpa@xxxxxxxxx; KY > Srinivasan <kys@xxxxxxxxxxxxx>; Haiyang Zhang > <haiyangz@xxxxxxxxxxxxx>; wei.liu@xxxxxxxxxx; Dexuan Cui > <decui@xxxxxxxxxxxxx>; arnd@xxxxxxxx; Tianyu Lan > <Tianyu.Lan@xxxxxxxxxxxxx>; Michael Kelley (LINUX) > <mikelley@xxxxxxxxxxxxx>; linux-kernel@xxxxxxxxxxxxxxx; linux- > hyperv@xxxxxxxxxxxxxxx; linux-arch@xxxxxxxxxxxxxxx; jgross@xxxxxxxx; > mat.jonczyk@xxxxx > Subject: [EXTERNAL] Re: [PATCH v4 2/5] x86/hyperv: Add VTL specific structs > and hypercalls > > 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. After reconsidering, I believe it would be wise to consult the "x86 maintainers" regarding this matter. Hence, I intend to send the next version without this change. - Saurabh > > 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