Messages in this thread | | | Date | Fri, 22 Nov 2013 12:59:41 -0500 | From | Peter Hurley <> | Subject | Re: [RFC] Control dependencies |
| |
On 11/22/2013 08:46 AM, Peter Zijlstra wrote: > How about the below version? > > --- > --- a/kernel/events/ring_buffer.c > +++ b/kernel/events/ring_buffer.c > @@ -61,19 +61,20 @@ static void perf_output_put_handle(struc > * > * kernel user > * > - * READ ->data_tail READ ->data_head > - * smp_mb() (A) smp_rmb() (C) > - * WRITE $data READ $data > - * smp_wmb() (B) smp_mb() (D) > - * STORE ->data_head WRITE ->data_tail > + * if (LOAD ->data_tail) { LOAD ->data_head > + * (A) smp_rmb() (C) > + * STORE $data LOAD $data > + * smp_wmb() (B) smp_mb() (D) > + * STORE ->data_head STORE ->data_tail
I wasn't subscribed to linux-arch so missed the smp_store_release() outcome, if there was one.
Are (B) and (D) still slated for changing to STORE.rel semantics, aka smp_store_release()?
I realize that, for the perf ring buffer, (D) is in userspace but I'm also interested in non-perf situations where (D) would be in the kernel.
Regards, Peter Hurley
| |