On Thu, May 30, 2019 at 11:50:39AM +0200, Andrea Parri wrote: > > > Looking at the perf ring buffer, there appears to be a missing barrier in > > > perf_aux_output_end(): > > > > > > rb->user_page->aux_head = rb->aux_head; > > > > > > should be: > > > > > > smp_store_release(&rb->user_page->aux_head, rb->aux_head); > > > > > > It should also be using smp_load_acquire(). See > > > Documentation/core-api/circular-buffers.rst > > > > > > And a (partial) patch has been proposed: https://lkml.org/lkml/2018/5/10/249 > > > > So, if that's all that needs to be fixed, can you use the same > > buffer/code if that patch is merged? > > That's about one year old...: let me add the usual suspects in Cc: ;-) > since I'm not sure what the plan was (or if I'm missing something) ... The AUX crud is 'special' and smp_store_release() doesn't really help in many cases. Notable, AUX is typically used in combination with a hardware writer. The driver is in charge of odering here, the generic code doesn't know what the appropriate barrier (if any) is and would have to resort to the most expensive/heavy one available. Also see the comment right above this function: "It is the pmu driver's responsibility to observe ordering rules of the hardware, so that all the data is externally visible before this is called."