On Fri, Nov 9, 2018 at 10:03 PM Arnd Bergmann <arnd@xxxxxxxx> wrote: > On Fri, Nov 9, 2018 at 5:25 PM Sven Van Asbroeck <thesven73@xxxxxxxxx> wrote: > > On Thu, Nov 8, 2018 at 9:07 AM Arnd Bergmann <arnd@xxxxxxxx> wrote: > > > > +struct anybus_mbox_hdr { > > > > + u16 id; > > > > + u16 info; > > > > + u16 cmd_num; > > > > + u16 data_size; > > > > + u16 frame_count; > > > > + u16 frame_num; > > > > + u16 offset_high; > > > > + u16 offset_low; > > > > + u16 extended[8]; > > > > +} __packed; > > > > > > I don't think you want this to be __packed, it won't change the layout > > > but instead force byte accesses on architectures that don't have > > > fast unaligned load/store instructions. > > > > > > Instead of the __packed, it's almost always better to ensure that > > > the structure itself is aligned to a 16-bit address. > > > > > > > A general question about __packed. > > > > My current understanding is this: > > (please tell me if it's incorrect or incomplete) > > > > + without __packed, the compiler is free to pad the struct in whatever > > way it feels is best. > > + with __packed, the fields have to be laid out EXACTLY as specified. > > It's not up to the compiler but the ELF ABI. The rules are largely consisten > among the architectures we support, but there are a couple of notable > exceptions: > > - ARM OABI requires 32-bit alignment for structures > - x86-32 aligns 64-bit members to 32-bit rather than 64-bit > - m68k has some oddities, I think they can pack certain > members (don't remember the details) M68k aligns 16-bit and larger members to 16-bit. Gr{oetje,eeting}s, Geert -- Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@xxxxxxxxxxxxxx In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that. -- Linus Torvalds