Thread (65 messages) 65 messages, 9 authors, 2019-06-17

Re: [PATCH 1/7] General notification queue with user mmap()'able ring buffer

From: Peter Zijlstra <peterz@infradead.org>
Date: 2019-05-31 08:35:53
Also in: keyrings, linux-block, linux-fsdevel, linux-security-module, lkml

On Thu, May 30, 2019 at 11:50:39AM +0200, Andrea Parri wrote:
quoted
quoted
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."
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help