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