<div dir="auto"><div><br><br><div class="gmail_quote"><div dir="ltr">On Tue, Mar 27, 2018, 20:43 Benjamin Herrenschmidt <<a href="mailto:benh@kernel.crashing.org">benh@kernel.crashing.org</a>> wrote:</div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
><br>
> Of course, you'd have to be pretty odd to want to start a DMA with a<br>
> read anyway - partly exactly because it's bad for performance since<br>
> reads will be synchronous and not buffered like a write).<br>
<br>
I have bad memories of old adaptec controllers ...<br></blockquote></div></div><div dir="auto"><br></div><div dir="auto">*Old* adaptec controllers were likely to use the in/out instructions for status and command data.</div><div dir="auto"><br></div><div dir="auto">Those are actually even more ordered than UC reads and writes: the in/out instructions are not just fully ordered, but are fully *synchronous* on x86. </div><div dir="auto"><br></div><div dir="auto">So not just doing accesses in order, but actually waiting for everything to drain before they start executing, but they also wait for the operation itself to complete (ie "out" will not just queue the write, it will then wait for the queue to empty and the write data to hit the line).</div><div dir="auto"><br></div><div dir="auto">That's why in/out were *so* slow, and why nobody uses them any more (well, the address size limitations and the lack of any remapping of the address obviously also are a reason).</div><div dir="auto"><br></div><div dir="auto">    Linus</div><div dir="auto"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
</blockquote></div></div></div>