On Fri, Jul 24, 2015 at 04:33:16PM +0100, Peter Zijlstra wrote: > On Fri, Jul 24, 2015 at 08:29:05AM -0700, Paul E. McKenney wrote: > > The ring-buffer code uses control dependencies, and the shiny new > > READ_ONCE_CTRL() is now in mainline. I was idly curious about whether > > the write side could use smp_store_release(), and I found this: > > > > static inline void perf_mmap__write_tail(struct perf_mmap *md, u64 tail) > > { > > struct perf_event_mmap_page *pc = md->base; > > > > /* > > * ensure all reads are done before we write the tail out. > > */ > > mb(); > > pc->data_tail = tail; > > } > > > > I see mb() rather than smp_mb(). Did I find the correct code for the > > write side? If so, why mb() rather than smp_mb()? To serialize against > > MMIO interactions with hardware counters or some such? > > This is userspace, it doesn't patch itself depending on if its run on an > SMP machine or not. Yup, and that's why mb() expands to dmb instead of dsb in tools/arch/arm64/include/asm/barrier.h (I see there's an XXX: comment there asking about the difference). Will -- To unsubscribe from this list: send the line "unsubscribe linux-arch" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html