Re: memory barriers in bus_dmamap_sync() ?

From: Scott Long <scottl_at_samsco.org>
Date: Wed, 11 Jan 2012 08:54:52 -0700
On Jan 10, 2012, at 2:37 PM, Luigi Rizzo wrote:

> I was glancing through manpages and implementations of bus_dma(9)
> and i am a bit unclear on what this API (in particular, bus_dmamap_sync() )
> does in terms of memory barriers.
> 
> I see that the x86/amd64 and ia64 code only does the bounce buffers.
> The mips seems to do some coherency-related calls.
> 
> How do we guarantee, say, that a recently built packet is
> to memory before issuing the tx command to the NIC ?
> 

In short, i386 and amd64 architectures do bus snooping between the cpu cache and the memory and bus controllers, and coherency is implicit and guaranteed.  No explicit barriers or flushes are needed for device mastered DMA.  Other CPU architectures have appropriate cache flushes and memory barriers built into their busdma implementations.  Note that this is a different scenario than device register accesses, which is essentially host mastered DMA.

Scott
Received on Wed Jan 11 2012 - 14:54:57 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:40:23 UTC