On 6/25/2018 7:56 AM, Andrea Parri wrote: > On Mon, Jun 25, 2018 at 04:18:30PM +0200, Peter Zijlstra wrote: >> On Mon, Jun 25, 2018 at 03:16:43PM +0200, Andrea Parri wrote: >>>>> A concrete example being the store-buffering pattern reported in [1]. >>>> >>>> Well, that example only needs a store->load barrier. It so happens >>>> smp_mb() is the only one actually doing that, but imagine we had a >>>> weaker barrier that did just that, one that did not imply the full >>>> transitivity smp_mb() does. >>>> >>>> Then the example from [1] could use that weaker thing. >>> >>> Absolutely (and that would be "fence w,r" on RISC-V, IIUC). >> >> Ah cute. What is the transitivity model of those "fence" instructions? I >> see their smp_mb() is "fence rw,rw" and smp_mb() must be RSsc. Otoh >> their smp_wmb() is "fence w,w" which is only only required to be RCpc. >> >> So what does RISC-V do for "w,w" and "w,r" like things? > > I'd defer to Daniel (in Cc:) for this ;-) I simply checked the SB pattern > plus w,r fences against the following models: > > http://www.cl.cam.ac.uk/~sf502/regressions/rmem/ > http://moscova.inria.fr/~maranget/cats7/riscv/ > First off, the latest RISC-V spec is here, in case anyone hasn't seen it: https://github.com/riscv/riscv-isa-manual. It's all public now, fortunately. There's a PDF link at the bottom of that page too. The spec now has proposed Linux mappings (not all of which have actually made it upstream...) in Appendix A.5 as well. We'd welcome general feedback on those. Now to the question above: RISC-V is (other-)multi-copy-atomic, so I don't think transitivity should be an issue here. We do have a "fence w,r", but we decided to warn against actually using it for a few reasons: 1) lack of known common use cases :), 2) IIRC there was some corner case discrepancy between the axiomatic and operational models if we allowed it, and 3) in practice, it's already both expensive enough and obscure enough that many or most implementations will simply just treat it as "fence rw,rw" anyway. So, in theory, "fence w,r" should be enough to prevent SB-like patterns. It's just not yet clear that it's a big enough win that it's worth creating a new fence macro for it, or pulling the current RISC-V recommendation against its use. What do you all think? Are there other known use cases where you really do want a "fence w,r" that's intentionally not also something stronger? How common would the pattern be? Dan -- To unsubscribe from this list: send the line "unsubscribe linux-doc" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html