Re: RFC on writel and writel_relaxed
From: Jason Gunthorpe <jgg@ziepe.ca>
Date: 2018-03-29 16:40:57
Also in:
linux-rdma
On Thu, Mar 29, 2018 at 02:58:34PM +0000, David Laight wrote:
From: Jason Gunthorpequoted
Sent: 29 March 2018 15:45...quoted
quoted
quoted
When talking about ordering between the devices, the relevant question is what happens if the writel(DEVICE_BAR) triggers DEVICE_BAR to DMA from the DEVICE_FOO. 'ordered' means that in this case writel(DEVICE_FOO) must be presented to FOO before anything generated by BAR.Yes, and that isn't the case for arm because the writes can still be buffered.The statement is not about buffering, or temporal completion order, or the order of acks returning to the CPU. It is about pure transaction ordering inside the interconnect. Can write BAR -> FOO pass write CPU -> FOO?Almost certainly. The first cpu write can almost certainly be 'stalled' at the shared PCIe bridge. The second cpu write then completes (to a different target). That target then issues a peer to peer transfer that reaches the shared bridge. I doubt the order of the transactions is guaranteed when it becomes 'un-stalled'.
The PCI spec has very strong wording on ordering that covers this case. Stalled bridges have to follow the ordering rules, and posted writes cannot pass other posted writes. Since in PCI all three transactions: CPU -> FOO CPU -> BAR BAR -> FOO Must traverse a shared bus segment, they must be placed on that bus in the above order, and the bridge(s) toward FOO must preserve this order. ARM's AXI has similar rules, I just can't recall the tiny details right now :)
Of course, these are peer to peer transfers, and strange ones at that. Normally you'd not be doing peer to peer transfers that access 'memory' the cpu has just written to.
It is the best situation I can think of where order of completion to different devices would matter to a generic Linux driver.. .. And there are patches circulating right now for NVMe that enable exactly this kind of transfer, and rely on these kind of semantics, so it is a relevant detail :) Jason