gpu: nova-core: vbios: use offset_of in PmuLookupTableHeader::new
Subsystems (4)
PATCH 1/1 gpu: nova-core: vbios: use offset_of in PmuLookupTableHeader::new
Use the offset_of macro for each struct field, annotate the PmuLookupTableHeader struct with #[repr(C)] attribute, and add a TODO message to use FromBytes when available.
--- drivers/gpu/nova-core/vbios.rs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-)
drivers/gpu/nova-core/vbios.rs +6 -4
@@ -893,6 +893,7 @@ fn try_from(base: BiosImageBase) -> Result<Self> {/// /// See the [`PmuLookupTable`] description for more information. #[expect(dead_code)] +#[repr( C )] struct PmuLookupTableHeader { version:u8 , header_len:u8 ,
@@ -901,16 +902,17 @@ struct PmuLookupTableHeader { }impl PmuLookupTableHeader { +// TODO[TRSM]: use FromBytes::from_bytes when it becomes available. fn new (data: &[u8 ]) ->Result <Self > {if data.len () < core::mem::size_of ::<Self >() {return Err (EINVAL ); }Ok (PmuLookupTableHeader { - version: data[0 ], - header_len: data[1 ], - entry_len: data[2 ], - entry_count: data[3 ], + version: data[const { core::mem::offset_of!(PmuLookupTableHeader , version) }], + header_len: data[const { core::mem::offset_of!(PmuLookupTableHeader , header_len) }], + entry_len: data[const { core::mem::offset_of!(PmuLookupTableHeader , entry_len) }], + entry_count: data[const { core::mem::offset_of!(PmuLookupTableHeader , entry_count) }], }) } }
base-commit: 14ae91a81ec8fa0bc23170d4aa16dd2a20d54105
prerequisite-patch-id: 6f9311de987d56f4313d5fbdd85ed8c48a44e78c
Signature · 1 line
2.50.1
PATCH v2 1/1 gpu: nova-core: vbios: use size_of instead of magic number
12 is identical to the value of size_of::<BitHeader>(), so use the latter instead.
---
Changes in v2:
- Added #[repr(C)] to BitHeader
--- drivers/gpu/nova-core/vbios.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
drivers/gpu/nova-core/vbios.rs +2 -1
@@ -346,6 +346,7 @@ fn image_size_bytes(&self) -> usize {/// [`FwSecBiosImage`]. #[derive( Debug , Clone , Copy )] #[expect(dead_code)] +#[repr( C )] struct BitHeader {/// 0h: BIT Header Identifier (BMP=0x7FFF/BIT=0xB8FF) id:u16 ,
@@ -365,7 +366,7 @@ struct BitHeader {impl BitHeader {fn new (data: &[u8 ]) ->Result <Self > { -if data.len () <12 { +if data.len () < core::mem::size_of ::<Self >() {return Err (EINVAL ); }
base-commit: 14ae91a81ec8fa0bc23170d4aa16dd2a20d54105 --
2.50.1
Alexandre Courbot
maintainerRe: [PATCH v2] gpu: nova-core: vbios: use size_of instead of magic number
Quoted 4 lines · Rhys Lloyd
12 is identical to the value of
size_of::<BitHeader>(), so use the latter instead.Signed-off-by Rhys Lloyd <[email protected]>
Looking good - I'll push this to nova-next unless someone complains. Thanks!
PATCH v3 1/1 gpu: nova-core: vbios: change PmuLookupTableEntry to use size_of
In reply to Rhys LloydAnnotate the PmuLookupTableEntry with an #[repr(C, packed)] attribute. Removes another magic number by making the struct the same size as the data it needs to read, allowing the use of size_of::<PmuLookupTableEntry>()
---
Changes in v2:
- get_data helper function renamed to data Changes in v3:
- Change PmuLookupTableEntry.data back to u32
- Remove helper function
- Annotate PmuLookupTableEntry with #[repr(C, packed)]
--- drivers/gpu/nova-core/vbios.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
drivers/gpu/nova-core/vbios.rs +2 -1
@@ -893,6 +893,7 @@ fn try_from(base: BiosImageBase) -> Result<Self> {/// /// See the [`PmuLookupTable`] description for more information. #[expect(dead_code)] +#[repr( C , packed)] struct PmuLookupTableEntry { application_id:u8 , target_id:u8 ,
@@ -901,7 +902,7 @@ struct PmuLookupTableEntry {impl PmuLookupTableEntry {fn new (data: &[u8 ]) ->Result <Self > { -if data.len () <6 { +if data.len () < core::mem::size_of ::<Self >() {return Err (EINVAL ); }
base-commit: 14ae91a81ec8fa0bc23170d4aa16dd2a20d54105 --
2.50.1
Alexandre Courbot
maintainerRe: [PATCH v3] gpu: nova-core: vbios: change PmuLookupTableEntry to use size_of
Quoted 6 lines · Rhys Lloyd
Annotate the PmuLookupTableEntry with an
#[repr(C, packed)]attribute. Removes another magic number by making the struct the same size as the data it needs to read, allowing the use ofsize_of::<PmuLookupTableEntry>()Signed-off-by Rhys Lloyd <[email protected]>
Looking good - I'll also push this one after a short grace period. Thanks!
Alexandre Courbot
maintainerQuoted 30 lines · Rhys Lloyd
Use the
offset_ofmacro for each struct field, annotate thePmuLookupTableHeaderstruct with#[repr(C)]attribute, and add a TODO message to use FromBytes when available.Signed-off-by Rhys Lloyd <[email protected]>--- drivers/gpu/nova-core/vbios.rs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-)drivers/gpu/nova-core/vbios.rs +2
-0@@ -893,6 +893,7 @@ fn try_from(base: BiosImageBase) -> Result<Self> {/// /// See the [`PmuLookupTable`] description for more information. #[expect(dead_code)] +#[repr( C )] struct PmuLookupTableHeader { version:u8 , header_len:u8 ,@@ -901,16 +902,17 @@ struct PmuLookupTableHeader { }impl PmuLookupTableHeader { +// TODO[TRSM]: use FromBytes::from_bytes when it becomes available. fn new (data: &[u8 ]) ->Result <Self > {if data.len () < core::mem::size_of ::<Self >() {return Err (EINVAL ); }
drivers/gpu/nova-core/vbios.rs struct PmuLookupTableHeader { · line 915
Quoted 10 lines
drivers/gpu/nova-core/vbios.rs +4
-4Ok (PmuLookupTableHeader { - version: data[0 ], - header_len: data[1 ], - entry_len: data[2 ], - entry_count: data[3 ], + version: data[const { core::mem::offset_of!(PmuLookupTableHeader , version) }], + header_len: data[const { core::mem::offset_of!(PmuLookupTableHeader , header_len) }], + entry_len: data[const { core::mem::offset_of!(PmuLookupTableHeader , entry_len) }], + entry_count: data[const { core::mem::offset_of!(PmuLookupTableHeader , entry_count) }],
This chunk does not apply - on nova-next PmuLookupTableHeader does not seem to exist. I think I remember you split PmuLookupTableHeader in another patch, so can you send all the relevant patches as a series that applies cleanly on top of nova-next?
Danilo Krummrich
maintainerQuoted 4 lines · Alexandre Courbot
This chunk does not apply - on nova-next PmuLookupTableHeader does not seem to exist. I think I remember you split PmuLookupTableHeader in another patch, so can you send all the relevant patches as a series that applies cleanly on top of nova-next?
If otherwise the series is ready, please wait for -rc1 to be out, and rebase on -rc1.
Thanks,
Danilo
Quoted 7 lines · Danilo Krummrich
Quoted 4 lines · Alexandre Courbot
This chunk does not apply - on nova-next PmuLookupTableHeader does not seem to exist. I think I remember you split PmuLookupTableHeader in another patch, so can you send all the relevant patches as a series that applies cleanly on top of nova-next?
Quoted 5 lines
If otherwise the series is ready, please wait for -rc1 to be out, and rebase on -rc1.
Thanks,
Danilo
Strange that it does not apply. I'll figure out how to send a patch series and resend it without any changes.