[PATCH v8 3/4] gpio: rpmsg: add generic rpmsg GPIO driver
Shenwei Wang
shenwei.wang at nxp.com
Fri Feb 20 11:09:24 PST 2026
> -----Original Message-----
> From: Andrew Lunn <andrew at lunn.ch>
> Sent: Friday, February 20, 2026 11:42 AM
> To: Shenwei Wang <shenwei.wang at nxp.com>
> Cc: Arnaud POULIQUEN <arnaud.pouliquen at foss.st.com>; Linus Walleij
> <linusw at kernel.org>; Bartosz Golaszewski <brgl at kernel.org>; Jonathan Corbet
> <corbet at lwn.net>; Rob Herring <robh at kernel.org>; Krzysztof Kozlowski
> <krzk+dt at kernel.org>; Conor Dooley <conor+dt at kernel.org>; Bjorn Andersson
> <andersson at kernel.org>; Mathieu Poirier <mathieu.poirier at linaro.org>; Frank Li
> <frank.li at nxp.com>; Sascha Hauer <s.hauer at pengutronix.de>; Shuah Khan
> <skhan at linuxfoundation.org>; linux-gpio at vger.kernel.org; linux-
> doc at vger.kernel.org; linux-kernel at vger.kernel.org; Pengutronix Kernel Team
> <kernel at pengutronix.de>; Fabio Estevam <festevam at gmail.com>; Peng Fan
> <peng.fan at nxp.com>; devicetree at vger.kernel.org; linux-
> remoteproc at vger.kernel.org; imx at lists.linux.dev; linux-arm-
> kernel at lists.infradead.org; dl-linux-imx <linux-imx at nxp.com>; Bartosz
> Golaszewski <brgl at bgdev.pl>
> Subject: [EXT] Re: [PATCH v8 3/4] gpio: rpmsg: add generic rpmsg GPIO driver
> > > > struct msg_hdr {
> > > > u8 id;
> > > > u32 size;
> > > > u8 flags;
> > > > };
> > >
> > > That is just a bad design. The point of not allowing __packed is
> > > that it forces you to design your structures correctly. Maybe AI has
> > > no idea of taste, but Maintainer do and would not allow a u32 to be unaligned
> like this.
> > >
> >
> > Let’s keep the discussion technical instead of taste. 😊
> >
> > My point with the earlier example was simply to illustrate how layout
> > differences can happen across architectures or compilers. I’m more
> > interested in understanding how you would prefer this specific
> > structure to be defined so that it avoids unaligned fields while still maintaining a
> stable on‑wire format.
>
> struct msg_hdr {
> u32 size;
> u8 id;
> u8 flags;
> };
>
> The compiler will lay this out as you expect, it won't add any padding between
> the fields.
>
Yes, most compilers will lay this out without inserting padding between the fields.
However, for a communication packet, we cannot freely reorder or tweak members
just to satisfy alignment rules—the field order itself becomes part of the protocol definition.
Even within netdev, where you’re very familiar, the classic ethhdr still carries the packed annotation
despite being naturally aligned:
struct ethhdr {
unsigned char h_dest[ETH_ALEN]; /* destination eth addr */
unsigned char h_source[ETH_ALEN]; /* source ether addr */
__be16 h_proto; /* packet type ID field */
} __attribute__((packed));
Thanks,
Shenwei
> You need to be careful with sizeof(struct msg_hdr). On 8 and 16 bit machines, it is
> probably 6. On 32, or 64 bit machine it is probably 8.
>
> I would say having a 6 byte message is probably a bad design, and you should try
> to make the u32 a u16 if you can. Again, not using the __packed is making you
> think about the design, and probably makes the design better as a result.
>
> Andrew
More information about the linux-arm-kernel
mailing list