Re: [PATCH v3 15/15] Introduce v18 dtb version
From: Herve Codina
Date: Thu Oct 29 2026 - 20:02:57 EST
Hi David,
I know you are busy but if you could give me your opinion on this last
message that would be greatly appreciated.
I've started to prepare the next iteration of the series adding support for
"structured" tags and their definition need to be stable to move forward.
The question to answer to complete the definition of the "structured" tag
format is: Should SAFE_SKIP bit be re-introduced?
IMHO, it should.
Best regards,
Hervé
On Wed, 21 Oct 2026 15:59:23 +0200
Herve Codina <herve.codina@xxxxxxxxxxx> wrote:
> Hi David,
>
> On Wed, 21 Oct 2026 13:26:49 +1100
> David Gibson <david@xxxxxxxxxxxxxxxxxxxxx> wrote:
>
> >
> > Correct. Btw, I know I suggested "skippable tag" as a term, but given
> > how that gets kind of misleading in the case of writes, I'm coming to
> > prefer the orignal "structured tag" term.
>
> Ok, no problem to switch back to "structured tag". On my side also, I prefer
> this term.
>
> Now I think that the bit indicating if a structured tag can be skip or not
> should be kept. I know the we can use "old" tag format when a tag cannot be
> skipped but I thing that using structured tags for those tags can lead to some
> benefit. For instance, in fdt_tag_next() we can benefit of the data size
> encoded for structured tags for all king of structured tags (skippable and not
> skippable) and retrieve the next tag without the need for parsing data related
> to a tag. When tag has a string as data, without the length we have to scan the
> string to find its end. Of course we can add the length if the tag definition
> but this is automatically implied if we use a structured tag.
>
> So for structured tag, I can propose:
> - bit 31: 1 to identify a structured tag
> - bit 30: SAFE_SKIP bit (1 if we can skip, O otherwise)
> - bit 29..24: Data lendth encoding
> 0b000000: No data
> 0b000001: 1 32bit word of data
> ...
> 0b111110: 63 x 32bit words data
> 0b111111: varlen encoding (1 32bit word added after the tag to encode the
> data length in bytes.
> - bit 23..0: Tag id
>
> Without the SAFE_SKIP bit, all structured tags must be skippable. IMHO, we
> could regret this limitation in the future.
>
> The cost of the SAFE_SKIP bit is not a lot. When we check to see if an
> unkwown tag can be skipped, we are going to move from
> if (tag & 1<31)
> to
> if ((tag & (1<31 | 1<<30)) == (1<31 | 1<<30))
>
> IHMO, this is acceptable.
>
> Of course, if the SAFE_SKIP bit is re-introduced, I will also re-add the test
> checking that unknown structured tag that cannot be skipped leads to an error.
>
> Best regards,
> Hervé
--
Hervé Codina, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com