[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <201210111228.25995.arnd@arndb.de>
Date: Thu, 11 Oct 2012 12:28:25 +0000
From: Arnd Bergmann <arnd@...db.de>
To: linux-arm-kernel@...ts.infradead.org
Cc: Eric Dumazet <eric.dumazet@...il.com>,
"Russell King - ARM Linux" <linux@....linux.org.uk>,
Jon Masters <jonathan@...masters.org>, netdev@...r.kernel.org,
Måns Rullgård <mans@...sr.com>,
David Laight <David.Laight@...lab.com>,
Rob Herring <robherring2@...il.com>
Subject: Re: alignment faults in 3.6
On Thursday 11 October 2012, Eric Dumazet wrote:
> On Thu, 2012-10-11 at 11:32 +0100, Russell King - ARM Linux wrote:
> > On Thu, Oct 11, 2012 at 12:22:06PM +0200, Eric Dumazet wrote:
> > > I took a look, and I dont see why/how gcc could use a ldm instruction
> > >
> > > Doing so assumed the alignment of the structure was 8 bytes, but its
> > > not.
> > >
> > > Networking stack mandates that IP headers are aligned on 4 bytes
> > > boundaries, not 8 bytes.
> >
> > Err, no. ldm is "load multiple" not "load double". It loads multiple
> > 32-bit registers, and its requirement for non-faulting behaviour is for
> > the pointer to be 4 byte aligned. However, "load double" requires 8
> > byte alignment.
>
> So if you have an alignment fault, thats because IP header is not
> aligned on 4 bytes ?
>
> If so a driver is buggy and must be fixed.
>
> Please send us full stack trace
Rob Herring as the original reporter has dropped off the Cc list, adding
him back.
I assume that the calxeda xgmac driver is the culprit then. It uses
netdev_alloc_skb() rather than netdev_alloc_skb_ip_align() in
xgmac_rx_refill but it is not clear whether it does so intentionally
or by accident.
Arnd
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists