Re: [PATCH] staging: octeon: type change from uint<bits>_t to u<bits>

From: David Laight

Date: Tue Feb 10 2026 - 07:31:54 EST


On Tue, 10 Feb 2026 13:41:41 +0300
Dan Carpenter <dan.carpenter@xxxxxxxxxx> wrote:

> On Tue, Feb 10, 2026 at 10:19:52AM +0000, David Laight wrote:
> > As a separate issue, what is the purpose of all these bit-field structures?
> > You can't portably use C bit-fields to map hardware registers or network
> > packets.
> > It isn't just byte-order, the 'bit order' can differ even for the same
> > endianness.
>
> Huh. I didn't know that. Can you give an example?

You probably need to look at one of the old BE ABI.
But I've just failed to find a reference to an 'unexpected' bit order.

But play with union { u8 one:1; u8 all; } and you find that one has
the value 0x80 on BE.

There is a note in one of the kernel headers that all the architectures
that linux has supported since (at least) 2.6.24 have bit endianess
that matches the byte endianess.

There are definitely differences if bitfields cross word boundaries.
Basically the C language pretty much lets the implementation 'do what
it likes', so different architectures can behave differently.

ISTR a relatively recent change to gcc WRT the alignment of packed
bitfields on x86.

David

>
> regards,
> dan carpenter
>