On Tue, 5 Oct 2021 at 13:45, Peter Zijlstra <peterz@xxxxxxxxxxxxx> wrote: > On Tue, Oct 05, 2021 at 01:41:18PM +0200, Peter Zijlstra wrote: > > On Tue, Oct 05, 2021 at 12:58:47PM +0200, Marco Elver wrote: > > > +static __always_inline void kcsan_atomic_release(int memorder) > > > +{ > > > + if (memorder == __ATOMIC_RELEASE || > > > + memorder == __ATOMIC_SEQ_CST || > > > + memorder == __ATOMIC_ACQ_REL) > > > + __kcsan_release(); > > > +} > > > + [...] > > > + kcsan_atomic_release(memorder); > > > __atomic_thread_fence(memorder); > > > } > > > EXPORT_SYMBOL(__tsan_atomic_thread_fence); > > > > I find that very hard to read.. kcsan_atomic_release() it not in fact a > > release. It might be a release if @memorder implies one. You're right, this name can be improved. `kcsan_atomic_builtin_memorder(..)` is probably better > Also, what's the atomic part signify? Is that because you're modeling > the difference in acquire/release semantics between > smp_load_{acquire,release}() and atomic*_{acquire,release}() ? Sorry, just a bad name. It's about the builtins. The above suggested name should hopefully be clearer.