[U-Boot] [PATCH] net: Mark the ip_udp_hdr struct as packed
Jeroen Hofstee
jeroen at myspectrum.nl
Wed Jul 19 18:26:54 UTC 2017
Hi,
On 07/18/2017 08:10 PM, Joe Hershberger wrote:
> Hi Maxime,
>
> On Wed, Jul 12, 2017 at 9:34 AM, Maxime Ripard
> <maxime.ripard at free-electrons.com> wrote:
>> The -mno-unaligned-access flag used on ARM to prevent GCC from generating
>> unaligned accesses (obviously) will only do so on packed structures.
>>
>> It seems like gcc 7.1 is a bit stricter than previous gcc versions on this,
>> and using it lead to data abort for unaligned accesses when generating
>> network traffic.
>>
>> Fix this by adding the packed attribute to the ip_udp_hdr structure in
>> order to let GCC do its job.
>>
>> Signed-off-by: Maxime Ripard <maxime.ripard at free-electrons.com>
>> ---
>> include/net.h | 2 +-
>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/include/net.h b/include/net.h
>> index 997db9210a8f..7b815afffafa 100644
>> --- a/include/net.h
>> +++ b/include/net.h
>> @@ -390,7 +390,7 @@ struct ip_udp_hdr {
>> u16 udp_dst; /* UDP destination port */
>> u16 udp_len; /* Length of UDP packet */
>> u16 udp_xsum; /* Checksum */
>> -};
>> +} __attribute__ ((packed));
> Do you have an example of why this is unaligned? It seems that the
> structure itself is naturally packed (each element is aligned to its
> access size). It seems the only time this would hit a dabort is if the
> head of the buffer is not 32-bit aligned. Maybe we should address the
> place where that is the case instead of forcing byte-wise accesses in
> general for this structure?
|Perhaps __attribute__((aligned(2))) can prevent byte wise accesses?
Regards, Jeroen |
More information about the U-Boot
mailing list