BUS DMA sync

Maxime Henrion mux at freebsd.org
Wed Sep 24 14:54:48 PDT 2003


Vincent Jardin wrote:
> Hi,
> 
> I try to understand the purpose of the PRE sync (BUS_DMASYNC_PREREAD, 
> BUS_DMASYNC_PREWRITE).
> 
> I understand POST synchronization (BUS_DMASYNC_POSTREAD, 
> BUS_DMASYNC_POSTWRITE)  when a device to memory or a memory to device 
> transfert needs to be synchronized. However, what does a synchronization 
> before a transfert mean ?

With common architectures where FreeBSD runs on, only BUS_DMASYNC_PREWRITE
and BUS_DMASYNC_POSTREAD are actually meaningful and needed.  It's good
style to use the two others where appriopriate though, because some more
exotic architecture might require it some day.

BUS_DMASYNC_PREWRITE is used to synchronize before there's a DMA tranfer
from host memory to a device.  It's needed to ensure the device will
read up-to-date memory, because recent changes to memory might still sit
in a cache, so it actually flushes the memory cache.

BUS_DMASYNC_POSTREAD is used to synchronize after a DMA transfer from
the device to host memory.  It's needed to ensure the software will get
up-to-date memory as written by the device, and not outdated memory sitting
in a cache, so it actually invalidates the memory cache.

Cheers,
Maxime


More information about the freebsd-hackers mailing list