On Sat, Aug 2, 2025, at 17:23, Hans Zhang wrote: > On 2025/8/2 02:08, Keith Busch wrote: >> On Sat, Aug 02, 2025 at 12:54:27AM +0800, Hans Zhang wrote: >>> >>> *value = (type)data; \ >>> >>> And this function. Could it be that I misunderstood something? >> >> The above macro retains the caller's type for "value". If the caller >> passes a "u8 *", the value is deferenced as a u8. > > In this macro definition, bus->ops->read needs to ensure the byte order > of the read, as Lukas mentioned; otherwise, there is also a big-endian > issue at this location. No, there is no endianness problem here, the problem with casting the pointer type like u32 *value; *(type *)value = data; or any variation of that is is that it only writes to the first few bytes of *value, and that introduces both the observed endianess problem and possibly worse uninitialized data usage or out-of-bounds stack access. Arnd