Cogent 637 board
Jay Monkman
jtm at smoothsmoothie.com
Thu Nov 10 15:56:46 UTC 2005
Joel Sherrill <joel at OARcorp.com> wrote:
>
> More than likely ARM memcpy changed from the 4.6 newlib to the current
> 1.13. So this alignment issue is now a factor. I haven't looked at
> newlib yet but if the newlib ARM memcpy does not properly deal with
> misaligned memory, I would consider it a bug in that code and not
> something the driver shoudl deal with except as a potential performance
> optimization.
It's not in the memcpy. That works fine.
Here's what was happening:
Network driver allocates an mbuf and cluster, cluster data is 4-byte
aligned
Driver copies received ethernet packet into cluster at offset 0.
This puts the IP header at offset 14, which is not aligned
Sometime later, udp_input() tries to access a 4-byte field in the IP
header, and BOOM - data abort.
My fix was to offset the ethernet header 2 bytes into the cluster. That causes
the IP header to be 4 byte aligned. The ethernet head doesn't need to be 4 byte
aligned, since the only multibyte element in it is 2 bytes long.
More information about the users
mailing list