From: Yuval Mintz <yuval.mi...@qlogic.com> Date: Tue, 10 May 2016 18:15:08 +0000
>> > I'm not entirely convinced this is true; If we'll not enforce the >> > alignment of this 64-bit field, it's possible there will be >> > differences between 32-bit and 64-bit machines versions of this struct. >> > You have to recall that this is going to be copied via DMA between PF >> > and VF, so they must have the exact same representation of the structure. >> >> Then use properly sized types to fill in all the space in the structure, >> that's how >> you guarantee layout, not aligned_u64. Also, do not use the packed >> attribute. >> >> struct foo { >> u32 x; >> u32 y; >> u64 z; >> }; >> >> 'z' will always be 64-bit aligned. > > Perhaps my bit-numeric is a bit weak - why is it so? foo is 64-bit aligned, therefore a properly aligned struct member will be so as well. We absolutely depend upon this for several data structures in the kernel.