[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date: Fri, 11 Nov 2022 12:30:26 -0800
From: "Joseph, Jithu" <jithu.joseph@...el.com>
To: Dave Hansen <dave.hansen@...el.com>, Borislav Petkov <bp@...en8.de>
CC: <hdegoede@...hat.com>, <markgross@...nel.org>,
<tglx@...utronix.de>, <mingo@...hat.com>,
<dave.hansen@...ux.intel.com>, <x86@...nel.org>, <hpa@...or.com>,
<gregkh@...uxfoundation.org>, <ashok.raj@...el.com>,
<tony.luck@...el.com>, <linux-kernel@...r.kernel.org>,
<platform-driver-x86@...r.kernel.org>, <patches@...ts.linux.dev>,
<ravi.v.shankar@...el.com>, <thiago.macieira@...el.com>,
<athenas.jimenez.gonzalez@...el.com>, <sohil.mehta@...el.com>
Subject: Re: [PATCH v2 10/14] platform/x86/intel/ifs: Add metadata validation
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
Powered by blists - more mailing lists