Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 28 Jun 2014 22:40:39 -0700
From:      John-Mark Gurney <jmg@funkthat.com>
To:        Warner Losh <imp@bsdimp.com>
Cc:        "freebsd-arm@freebsd.org" <arm@freebsd.org>
Subject:   Re: arm alignment faults...
Message-ID:  <20140629054039.GP1560@funkthat.com>
In-Reply-To: <86E20F1C-C161-45B2-AC82-11738596E004@bsdimp.com>
References:  <20140629033823.GN1560@funkthat.com> <CAJ-VmokxO5vfOOSvPrTfnda6gSKOPpJQF3kto3AdgUhvbFgNYg@mail.gmail.com> <20140629040150.GO1560@funkthat.com> <CAJ-Vmon1iFeJdJ-nBnz%2B4bqannshT4nct2dFKep1EZzCEM62Jw@mail.gmail.com> <86E20F1C-C161-45B2-AC82-11738596E004@bsdimp.com>

next in thread | previous in thread | raw e-mail | index | archive | help
Warner Losh wrote this message on Sat, Jun 28, 2014 at 22:53 -0600:
> 
> On Jun 28, 2014, at 10:52 PM, Adrian Chadd <adrian@freebsd.org> wrote:
> 
> > On 28 June 2014 21:01, John-Mark Gurney <jmg@funkthat.com> wrote:
> >> Adrian Chadd wrote this message on Sat, Jun 28, 2014 at 20:44 -0700:
> >>> On 28 June 2014 20:38, John-Mark Gurney <jmg@funkthat.com> wrote:
> >>>> So, one of the little projects I'd like to see is the removal of
> >>>> ETHER_ALIGN from the tree..  This bogosity can (and does) cause the use
> >>>> of bouncing durning DMA ops on all ethernet frames...
> >> 
> >> Now that I think about it, total removal may not be necessary, just
> >> the requirement to use it...  If the ethernet dma engine can do half
> >> word aligned dma, then there would be benifit on those to keep
> >> ETHER_ALIGN...
> >> 
> >>> Well, as long as you're not doing it by forcing the various CPUs to
> >>> handle unaligned accesses.
> >> 
> >> Hard to do on armv4 which I don't believe supports unaligned access...
> >> 
> >>> The cost of those unaligned accesses on some CPUs that support them is
> >>> not trivial. We benchmarked some of the ARM cores at Qualcomm back
> >>> when looking to migrate stuff to ARM and it wasn't very quick.
> >> 
> >> I plan on fixing the TCP/IP stack to copy data to an aligned buffer
> >> (maybe only if the original buffer isn't aligned) on the stack when
> >> __NO_STRICT_ALIGNMENT is not defined...  I can't see how copying the
> >> entire packet is cheaper than copying 20 bytes or so...
> > 
> > There's lots of other stupid corner cases that screw you.
> > 
> > VLAN headers add extra bytes.
> > 
> > 802.11 headers can offset things depending upon the 802.11 frame type
> > (3-addr, 4-addr, vlan, no vlan, etc.)
> > 
> > There's no guarantee all ethernet DMA engines can do the alignment as
> > required. :(
> 
> The ate driver for Atmel?s AT91RM9200 is one such beast.

Are you sure?  The tag for data says alignment 1:
        if (bus_dma_tag_create(bus_get_dma_tag(dev), 1, 0,
            BUS_SPACE_MAXADDR_32BIT, BUS_SPACE_MAXADDR, NULL, NULL, MCLBYTES,
            1, MCLBYTES, 0, busdma_lock_mutex, &sc->sc_mtx, &sc->mtag))

Or is that a limitation on the parent?

I did an audit of the arm drivers (not mips), but I didn't see any that
have the restriction...  The one that I'm thinking of was the Cirrus
EP9302 in the TS-7200 port that I did years ago..

-- 
  John-Mark Gurney				Voice: +1 415 225 5579

     "All that I will do, has been done, All that I have, has not."



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20140629054039.GP1560>