On Thu, 2022-04-14 at 15:19 +0200, Vitaly Kuznetsov wrote: > Section 1.9 of TLFS v6.0b says: > > "All structures are padded in such a way that fields are aligned > naturally (that is, an 8-byte field is aligned to an offset of 8 bytes > and so on)". > > 'struct enlightened_vmcs' has a glitch: > > ... > struct { > u32 nested_flush_hypercall:1; /* 836: 0 4 */ > u32 msr_bitmap:1; /* 836: 1 4 */ > u32 reserved:30; /* 836: 2 4 */ > } hv_enlightenments_control; /* 836 4 */ > u32 hv_vp_id; /* 840 4 */ > u64 hv_vm_id; /* 844 8 */ > u64 partition_assist_page; /* 852 8 */ > ... > > And the observed values in 'partition_assist_page' make no sense at > all. Fix the layout by padding the structure properly. > > Fixes: 68d1eb72ee99 ("x86/hyper-v: define struct hv_enlightened_vmcs and clean field bits") > Reviewed-by: Michael Kelley <mikelley@xxxxxxxxxxxxx> > Signed-off-by: Vitaly Kuznetsov <vkuznets@xxxxxxxxxx> > --- > arch/x86/include/asm/hyperv-tlfs.h | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/arch/x86/include/asm/hyperv-tlfs.h b/arch/x86/include/asm/hyperv-tlfs.h > index 5225a85c08c3..e7ddae8e02c6 100644 > --- a/arch/x86/include/asm/hyperv-tlfs.h > +++ b/arch/x86/include/asm/hyperv-tlfs.h > @@ -548,7 +548,7 @@ struct hv_enlightened_vmcs { > u64 guest_rip; > > u32 hv_clean_fields; > - u32 hv_padding_32; > + u32 padding32_1; > u32 hv_synthetic_controls; > struct { > u32 nested_flush_hypercall:1; > @@ -556,7 +556,7 @@ struct hv_enlightened_vmcs { > u32 reserved:30; > } __packed hv_enlightenments_control; > u32 hv_vp_id; > - > + u32 padding32_2; > u64 hv_vm_id; > u64 partition_assist_page; > u64 padding64_4[4]; Makes sense. Reviewed-by: Maxim Levitsky <mlevitsk@xxxxxxxxxx> Best regards, Maxim Levitsky