Hello Jakub, On 08.01.21 17:32, Jakub Kicinski wrote: > On Fri, 8 Jan 2021 11:07:26 +0100 Ahmad Fatoum wrote: >>>>> +struct __packed tcan4x5x_map_buf { >>>>> + struct tcan4x5x_buf_cmd cmd; >>>>> + u8 data[256 * sizeof(u32)]; >>>>> +} ____cacheline_aligned; >>>> >>>> Due to the packing of the struct tcan4x5x_buf_cmd it should have a length of 4 >>>> bytes. Without __packed, will the "u8 data" come directly after the cmd? >>> >>> Yup, u8 with no alignment attribute will follow the previous >>> field with no holes. >> >> __packed has a documentation benefit though. It documents that the author >> considers the current layout to be the only correct one. (and thus extra >> care should be taken when modifying it). > > ____cacheline_aligned adds a big architecture dependent padding at the > end of this struct, so the size of this structure is architecture > dependent. Besides using packed forced the compiler to use byte by byte > loads on architectures without unaligned access, so __packed is not > free. https://godbolt.org/z/j68x8n seems to indicate that explicit alignment "overrules" packed's implicit alignment of 1 as there isn't any byte-by-byte access generated for a struct that is both packed and cacheline aligned. packed only structs are accessed byte-by-byte however. Did I get something wrong in my testcase? I compiled with ARM gcc 8.2 -mno-unaligned-access -fno-strict-aliasing -O2 Cheers, Ahmad -- Pengutronix e.K. | | Steuerwalder Str. 21 | http://www.pengutronix.de/ | 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |