From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tom Rini Date: Tue, 7 Jan 2020 08:22:25 -0500 Subject: [PATCH RESEND] usbtty: fix possible alignment issues In-Reply-To: <20200107052502.803-1-sw0312.kim@samsung.com> References: <20200107052502.803-1-sw0312.kim@samsung.com> Message-ID: <20200107132225.GO4866@bill-the-cat> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de On Tue, Jan 07, 2020 at 02:25:02PM +0900, Seung-Woo Kim wrote: > With gcc9, below warnings are shown: > drivers/serial/usbtty.c: In function 'usbtty_init_strings': > drivers/serial/usbtty.c:590:44: warning: taking address of packed member of 'struct usb_string_descriptor' may result in an unaligned pointer value [-Waddress-of-packed-member] > 590 | str2wide (CONFIG_USBD_MANUFACTURER, string->wData); > | ~~~~~~^~~~~~~ > drivers/serial/usbtty.c:596:44: warning: taking address of packed member of 'struct usb_string_descriptor' may result in an unaligned pointer value [-Waddress-of-packed-member] > 597 | str2wide (CONFIG_USBD_PRODUCT_NAME, string->wData); > | ~~~~~~^~~~~~~ > drivers/serial/usbtty.c:603:33: warning: taking address of packed member of 'struct usb_string_descriptor' may result in an unaligned pointer value [-Waddress-of-packed-member] > 604 | str2wide (serial_number, string->wData); > | ~~~~~~^~~~~~~ > drivers/serial/usbtty.c:610:49: warning: taking address of packed member of 'struct usb_string_descriptor' may result in an unaligned pointer value [-Waddress-of-packed-member] > 611 | str2wide (CONFIG_USBD_CONFIGURATION_STR, string->wData); > | ~~~~~~^~~~~~~ > drivers/serial/usbtty.c:617:50: warning: taking address of packed member of 'struct usb_string_descriptor' may result in an unaligned pointer value [-Waddress-of-packed-member] > 618 | str2wide (CONFIG_USBD_DATA_INTERFACE_STR, string->wData); > | ~~~~~~^~~~~~~ > drivers/serial/usbtty.c:623:50: warning: taking address of packed member of 'struct usb_string_descriptor' may result in an unaligned pointer value [-Waddress-of-packed-member] > 624 | str2wide (CONFIG_USBD_CTRL_INTERFACE_STR, string->wData); > | ~~~~~~^~~~~~~ > > Fix the issues by using packed structure. > > Ref: commit 616ebd8b9cb4 ("usb: composite: fix possible alignment issues") > Signed-off-by: Seung-Woo Kim > --- > resend with proper e-mail address > --- > drivers/serial/usbtty.c | 9 ++++++--- > 1 file changed, 6 insertions(+), 3 deletions(-) > > diff --git a/drivers/serial/usbtty.c b/drivers/serial/usbtty.c > index f1c1a260da..54e67dd0d1 100644 > --- a/drivers/serial/usbtty.c > +++ b/drivers/serial/usbtty.c > @@ -48,6 +48,8 @@ > #define CONFIG_USBD_DATA_INTERFACE_STR "Bulk Data Interface" > #define CONFIG_USBD_CTRL_INTERFACE_STR "Control Interface" > > +typedef struct { __le16 val; } __attribute__((aligned(16))) __le16_packed; > + > /* > * Buffers to hold input and output data > */ > @@ -372,14 +374,15 @@ static int fill_buffer (circbuf_t * buf); > void usbtty_poll (void); > > /* utility function for converting char* to wide string used by USB */ > -static void str2wide (char *str, u16 * wide) > +static void str2wide (char *str, void *wide) > { > int i; > + __le16_packed *tmp = wide; > for (i = 0; i < strlen (str) && str[i]; i++){ > #if defined(__LITTLE_ENDIAN) > - wide[i] = (u16) str[i]; > + tmp[i].val = (u16) str[i]; > #elif defined(__BIG_ENDIAN) > - wide[i] = ((u16)(str[i])<<8); > + tmp[i].val = ((u16)(str[i])<<8); > #else > #error "__LITTLE_ENDIAN or __BIG_ENDIAN undefined" > #endif We generally don't want packed structs and do need to disable this warning in general. Is this _really_ a problem, or are we just silencing the compiler here? Thanks! -- Tom -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 833 bytes Desc: not available URL: