[PATCH RESEND] usbtty: fix possible alignment issues

Seung-Woo Kim sw0312.kim at samsung.com
Wed Jan 8 01:32:03 CET 2020


Hi,

On 2020년 01월 07일 22:22, Tom Rini wrote:
> On Tue, Jan 07, 2020 at 02:25:02PM +0900, Seung-Woo Kim wrote:
> 
...
>> ---
>>  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!

The change makes just silence for the warnings as like composite.c in
usb gadget.

Regards,
- Seung-Woo Kim


More information about the U-Boot mailing list