]> git.baikalelectronics.ru Git - kernel.git/commit
bpf, libbpf: use correct barriers in perf ring buffer walk
authorDaniel Borkmann <daniel@iogearbox.net>
Fri, 19 Oct 2018 13:51:03 +0000 (15:51 +0200)
committerAlexei Starovoitov <ast@kernel.org>
Fri, 19 Oct 2018 20:43:08 +0000 (13:43 -0700)
commit6953112f8e3271b30b95eed4b32f870bec2dc5b4
treedce79eaf0705b6bc3eaf0c8592fb36893427246b
parent44677857c6818f5699c1f6da6261cf2c68c6cb83
bpf, libbpf: use correct barriers in perf ring buffer walk

Given libbpf is a generic library and not restricted to x86-64 only,
the compiler barrier in bpf_perf_event_read_simple() after fetching
the head needs to be replaced with smp_rmb() at minimum. Also, writing
out the tail we should use WRITE_ONCE() to avoid store tearing.

Now that we have the logic in place in ring_buffer_read_head() and
ring_buffer_write_tail() helper also used by perf tool which would
select the correct and best variant for a given architecture (e.g.
x86-64 can avoid CPU barriers entirely), make use of these in order
to fix bpf_perf_event_read_simple().

Fixes: 223318473033 ("tools: bpf: move the event reading loop to libbpf")
Fixes: 313a164274a9 ("samples: bpf: add bpf_perf_event_output example")
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
Cc: Will Deacon <will.deacon@arm.com>
Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
tools/lib/bpf/libbpf.c