diff options
author | cem <cem@FreeBSD.org> | 2016-01-15 01:34:43 +0000 |
---|---|---|
committer | cem <cem@FreeBSD.org> | 2016-01-15 01:34:43 +0000 |
commit | 532a8c64da1f6ab1b23700919a2199a3a5f98b72 (patch) | |
tree | d3f3958cebeeace0aca39d75f44aec752c80bac0 /share/man | |
parent | 97799cc1a6e7cf381d3f16798ccbd1f7559231fe (diff) | |
download | FreeBSD-src-532a8c64da1f6ab1b23700919a2199a3a5f98b72.zip FreeBSD-src-532a8c64da1f6ab1b23700919a2199a3a5f98b72.tar.gz |
ioat(4): Add support for 'fence' bit with DMA_FENCE flag
Some classes of IOAT hardware prefetch reads. DMA operations that
depend on the result of prior DMA operations must use the DMA_FENCE flag
to prevent stale reads.
(E.g., I've hit this personally on Broadwell-EP. The Broadwell-DE has a
different IOAT unit that is documented to not pipeline DMA operations.)
Sponsored by: EMC / Isilon Storage Division
Diffstat (limited to 'share/man')
-rw-r--r-- | share/man/man4/ioat.4 | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/share/man/man4/ioat.4 b/share/man/man4/ioat.4 index 10f2663..e71c2e1 100644 --- a/share/man/man4/ioat.4 +++ b/share/man/man4/ioat.4 @@ -24,7 +24,7 @@ .\" .\" $FreeBSD$ .\" -.Dd January 7, 2016 +.Dd January 14, 2016 .Dt IOAT 4 .Os .Sh NAME @@ -134,7 +134,7 @@ Null operations do nothing, but may be used to test the interrupt and callback mechanism. .Pp All operations can optionally trigger an interrupt at completion with the -.Ar DMA_EN_INT +.Ar DMA_INT_EN flag. For example, a user might submit multiple operations to the same channel and only enable an interrupt and callback for the last operation. @@ -160,6 +160,17 @@ flag. .Ar DMA_NO_WAIT may return NULL.) .Pp +Operations that depend on the result of prior operations should use +.Ar DMA_FENCE . +For example, such a scenario can happen when two related DMA operations are +queued. +First, a DMA copy to one location (A), followed directly by a DMA copy +from A to B. +In this scenario, some classes of I/OAT hardware may prefetch A for the second +operation before it is written by the first operation. +To avoid reading a stale value in sequences of dependent operations, use +.Ar DMA_FENCE . +.Pp All operations, as well as .Fn ioat_get_dmaengine , can return NULL in special circumstances. |