diff mbox series

[bpf-next] selftests/bpf: fix sample_cnt shared between two threads

Message ID 20200602050349.215037-1-andriin@fb.com
State Accepted
Delegated to: BPF Maintainers
Headers show
Series [bpf-next] selftests/bpf: fix sample_cnt shared between two threads | expand

Commit Message

Andrii Nakryiko June 2, 2020, 5:03 a.m. UTC
Make sample_cnt volatile to fix possible selftests failure due to compiler
optimization preventing latest sample_cnt value to be visible to main thread.
sample_cnt is incremented in background thread, which is then joined into main
thread. So in terms of visibility sample_cnt update is ok. But because it's
not volatile, compiler might make optimizations that would prevent main thread
to see latest updated value. Fix this by marking global variable volatile.

Fixes: cb1c9ddd5525 ("selftests/bpf: Add BPF ringbuf selftests")
Signed-off-by: Andrii Nakryiko <andriin@fb.com>
---
 tools/testing/selftests/bpf/prog_tests/ringbuf.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Song Liu June 2, 2020, 4:18 p.m. UTC | #1
On Mon, Jun 1, 2020 at 10:04 PM Andrii Nakryiko <andriin@fb.com> wrote:
>
> Make sample_cnt volatile to fix possible selftests failure due to compiler
> optimization preventing latest sample_cnt value to be visible to main thread.
> sample_cnt is incremented in background thread, which is then joined into main
> thread. So in terms of visibility sample_cnt update is ok. But because it's
> not volatile, compiler might make optimizations that would prevent main thread
> to see latest updated value. Fix this by marking global variable volatile.
>
> Fixes: cb1c9ddd5525 ("selftests/bpf: Add BPF ringbuf selftests")
> Signed-off-by: Andrii Nakryiko <andriin@fb.com>

Acked-by: Song Liu <songliubraving@fb.com>
Alexei Starovoitov June 2, 2020, 7 p.m. UTC | #2
On Tue, Jun 2, 2020 at 9:22 AM Song Liu <song@kernel.org> wrote:
>
> On Mon, Jun 1, 2020 at 10:04 PM Andrii Nakryiko <andriin@fb.com> wrote:
> >
> > Make sample_cnt volatile to fix possible selftests failure due to compiler
> > optimization preventing latest sample_cnt value to be visible to main thread.
> > sample_cnt is incremented in background thread, which is then joined into main
> > thread. So in terms of visibility sample_cnt update is ok. But because it's
> > not volatile, compiler might make optimizations that would prevent main thread
> > to see latest updated value. Fix this by marking global variable volatile.
> >
> > Fixes: cb1c9ddd5525 ("selftests/bpf: Add BPF ringbuf selftests")
> > Signed-off-by: Andrii Nakryiko <andriin@fb.com>
>
> Acked-by: Song Liu <songliubraving@fb.com>

Applied. Thanks.

I also pushed trivial commit to fix test_verifier.
diff mbox series

Patch

diff --git a/tools/testing/selftests/bpf/prog_tests/ringbuf.c b/tools/testing/selftests/bpf/prog_tests/ringbuf.c
index bb8541f240e2..2bba908dfa63 100644
--- a/tools/testing/selftests/bpf/prog_tests/ringbuf.c
+++ b/tools/testing/selftests/bpf/prog_tests/ringbuf.c
@@ -25,7 +25,7 @@  struct sample {
 	char comm[16];
 };
 
-static int sample_cnt;
+static volatile int sample_cnt;
 
 static int process_sample(void *ctx, void *data, size_t len)
 {