On 11/11/2022 10:48 AM, Dave Hansen wrote: > On 11/11/22 10:39, Borislav Petkov wrote: >>> +struct meta_data { >>> + unsigned int meta_type; // metadata type >>> + unsigned int meta_size; // size of this entire struct including hdrs. >>> + unsigned int test_type; // IFS test type >>> + unsigned int fusa_info; // Fusa info >>> + unsigned int total_images; // Total number of images >>> + unsigned int current_image; // Current Image # >>> + unsigned int total_chunks; // Total number of chunks in this image >>> + unsigned int starting_chunk; // Starting chunk number in this image >>> + unsigned int size_per_chunk; // size of each chunk >>> + unsigned int chunks_per_stride; // number of chunks in a stride >>> + unsigned int reserved[54]; // Align to 256 bytes for chunk alignment. >> That looks weird. >> >> __packed and __aligned doesn't work? The struct was mirroring the initial 256 bytes of the metadata section of IFS test image (replicated below). I will change it to union with a separate padding member as Dave suggests below. IFS Metadata layout +----------------------+ 0 |META_TYPE_IFS (=1) | +----------------------+ |meta_size | +----------------------+ |test type | +----------------------+ |fusa info | +----------------------+ |total images | +----------------------+ |current image# | +----------------------+ |total chunks | +----------------------+ |starting chunk | +----------------------+ |size per chunk | +----------------------+ |chunks per stride | +----------------------+ |Reserved[54] | +----------------------+ 256 | | | | | | | | |Test Data/Chunks | | | | | | | | | +----------------------+ meta_size | META_TYPE_END (=0) | +----------------------+ meta_size + 4 | size of end (=8) | | | +----------------------+ meta_size + 8 > > ... and don't we try to use fixed-size typed in hardware structures, > like u32? > > There are also much nicer ways to do this: > > union meta_data { > struct { > u32 meta_type; // metadata type > u32 meta_size; // size of ... > }; > u8 padding[IFS_CHUNK_ALIGNMENT]; > } > > That doesn't have any magic linkage between the magic "54" (times 4) and > IFS_CHUNK_ALIGNMENT. It makes the compiler do the hard work for you. > > Voila, you have a union that's always IFS_CHUNK_ALIGNMENT in size, No > magic 54's necessary. Thanks, will adopt this. Jithu