Port-i386 archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: Serializing memory with respect to IN/OUT
On Thu, Nov 10, 2016 at 10:10:05AM -0600, David Young wrote:
> On Thu, Nov 10, 2016 at 10:52:54AM -0500, Mouse wrote:
> > But the code appears to work in practice. So I'm clearly missing
> > something. Have I just not found enough documentation to understand
> > all the effects of LOCK or the xFENCE instructions, or are IN and OUT
> > serialized as if they were memory accesses, or do things just delay
> > long enough that everything happens to get pushed in practice, or what?
>
> As I recall, there is an interplay of PCI bus ordering rules and x86
> memory-ordering rules such that IN and OUT flush DMA buffers to the
> device.
>
> Also, I think that the work performed by bus_dmamap_sync(9) on x86 is
> frequently redundant with a subsequent IN/OUT register access. It's
> too bad, because I have seen bus_dmamap_sync rise near the top of
> profiles involving wm(4). ISTR making a proposal about adding some
> bus_dmamap_sync(9) operations to help avoid redundant synchronization
> ops, but I probably got busy and stopped pursuing it.
>
> Last time I looked at bus_dmamap_sync, I realized that while there is a
> DMA-coherent cache on x86, you have to take care with the write/store
> buffer.
X86 is pretty much bullet proof for memory coherency.
I think there are only 2 odd things the software has to worry about.
1) Specutive cpu memory reads can cause 'old data' be read.
2) Explicit (IIRC) write-combining access via the store buffer.
IIRC IN/OUT serialise other memory accesses - so are actually
slightly stronger than straight memory accesses.
Don't believe some old p-pro? docs which allowed all sorts
of re-ordering. No real cpu behaved that way.
David
--
David Laight: david%l8s.co.uk@localhost
Home |
Main Index |
Thread Index |
Old Index