Re: [PATCH v3 15/15] Introduce v18 dtb version
From: Herve Codina
Date: Wed Oct 21 2026 - 10:06:58 EST
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é