
Hi Olav,
On Fri, Oct 10, 2008 at 11:53 AM, Olav Morken olavmrk@gmail.com wrote:
On Fri, Oct 10, 2008 at 7:01 PM, Ben Warren biggerbadderben@gmail.com wrote:
Olav Morken wrote:
This patch removes volatile from: volatile IP_t *ip = (IP_t *)xip;
Due to a bug, avr32-gcc will assume that ip is aligned on a word
boundary
when using volatile, which causes an exception since xip isn't aligned on a word boundary.
What other architectures have you tried this on?
None, as we don't have any other boards to test on. I do however believe that this change should have no side-effects. If any architectures relied on this function working as some sort of memory/io barrier, they would have problems with other functions such as ArpRequest, which doesn't have anything that will work as a memory/io barrier before the eth_send function.
Of course, I could be wrong. I would certainly not suggest including this change without some more testing.
The bug which causes this problem is in avr32-gcc, which makes assumptions about the alignement of IP_t when using volatile, and this change shouldn't be necessary once that bug is fixed. Until that bug is fixed, this change is needed for anyone trying to run U-Boot on this microcontroller.
I don't mean to be a pain, it's just that this code is shared by everything, so we need to be really careful. I agree with Haavard that the volatile keyword is probably used much more than it should be in the networking library.
I'll pull this into the net/testing branch in the next couple of days, and hopefully we'll get some volunteers to try it out on different architectures.
regards, Ben