From: <puranjay@kernel.org>
To: Madhavan Srinivasan <maddy@linux.ibm.com>,
Michael Ellerman <mpe@ellerman.id.au>,
Nicholas Piggin <npiggin@gmail.com>,
Christophe Leroy <christophe.leroy@csgroup.eu>,
Alexei Starovoitov <ast@kernel.org>,
Daniel Borkmann <daniel@iogearbox.net>,
Andrii Nakryiko <andrii@kernel.org>,
Martin KaFai Lau <martin.lau@linux.dev>,
Eduard Zingerman <eddyz87@gmail.com>, Song Liu <song@kernel.org>,
Yonghong Song <yonghong.song@linux.dev>,
John Fastabend <john.fastabend@gmail.com>,
KP Singh <kpsingh@kernel.org>,
Stanislav Fomichev <sdf@fomichev.me>, Hao Luo <haoluo@google.com>,
Jiri Olsa <jolsa@kernel.org>,
Hari Bathini <hbathini@linux.ibm.com>,
Naveen N Rao <naveen@kernel.org>, Mykola Lysenko <mykolal@fb.com>,
Peilin Ye <yepeilin@google.com>,
Kumar Kartikeya Dwivedi <memxor@gmail.com>
Cc: linuxppc-dev@lists.ozlabs.org, linux-kernel@vger.kernel.org,
bpf@vger.kernel.org, "Paul E . McKenney" <paulmck@kernel.org>,
lkmm@lists.linux.dev
Subject: Re: [PATCH RESEND bpf-next 1/1] powerpc64/bpf: Add jit support for load_acquire and store_release
Date: Thu, 17 Jul 2025 20:56:45 +0000 [thread overview]
Message-ID: <mb61pfreuy1rm.fsf@kernel.org> (raw)
In-Reply-To: <20250717202935.29018-2-puranjay@kernel.org>
Puranjay Mohan <puranjay@kernel.org> writes:
Somehow the cover letter for this patch was missed, adding it here:
To test the functionality of these special instructions, a tool called
blitmus[0] was used to convert the following baseline litmus test[1] to bpf
programs:
C MP+poonceonces
(*
* Result: Sometimes
*
* Can the counter-intuitive message-passing outcome be prevented with
* no ordering at all?
*)
{}
P0(int *buf, int *flag)
{
WRITE_ONCE(*buf, 1);
WRITE_ONCE(*flag, 1);
}
P1(int *buf, int *flag)
{
int r0;
int r1;
r0 = READ_ONCE(*flag);
r1 = READ_ONCE(*buf);
}
exists (1:r0=1 /\ 1:r1=0) (* Bad outcome. *)
Running the generated bpf program shows that the bad outcome is possible on
powerpc:
[fedora@linux-kernel blitmus]$ sudo ./mp_poonceonces
Starting litmus test with configuration:
Test: MP+poonceonces
Iterations: 4100
Test MP+poonceonces Allowed
Histogram (4 states)
21548375 :>1:r0=0; 1:r1=0;
301187 :>1:r0=0; 1:r1=1;
337147 *>1:r0=1; 1:r1=0;
18813291 :>1:r0=1; 1:r1=1;
Ok
Witnesses
Positive: 337147, Negative: 40662853
Condition exists (1:r0=1 /\ 1:r1=0) is validated
Observation MP+poonceonces Sometimes 337147 40662853
Time MP+poonceonces 13.48
Thu Jul 17 18:12:51 UTC
Now the second write and the first read is converted to store_release and
load_acquire and it gives us the following litmus test[2]
C MP+pooncerelease+poacquireonce
(*
* Result: Never
*
* This litmus test demonstrates that smp_store_release() and
* smp_load_acquire() provide sufficient ordering for the message-passing
* pattern.
*)
{}
P0(int *buf, int *flag)
{
WRITE_ONCE(*buf, 1);
smp_store_release(flag, 1);
}
P1(int *buf, int *flag)
{
int r0;
int r1;
r0 = smp_load_acquire(flag);
r1 = READ_ONCE(*buf);
}
exists (1:r0=1 /\ 1:r1=0) (* Bad outcome. *)
Running the generated bpf program shows that the bad outcome is *not* possible
on powerpc with the implementation in this patch:
[fedora@linux-kernel blitmus]$ sudo ./mp_pooncerelease_poacquireonce
Starting litmus test with configuration:
Test: MP+pooncerelease+poacquireonce
Iterations: 4100
Test MP+pooncerelease+poacquireonce Allowed
Histogram (3 states)
21036021 :>1:r0=0; 1:r1=0;
14488694 :>1:r0=0; 1:r1=1;
5475285 :>1:r0=1; 1:r1=1;
No
Witnesses
Positive: 0, Negative: 41000000
Condition exists (1:r0=1 /\ 1:r1=0) is NOT validated
Observation MP+pooncerelease+poacquireonce Never 0 41000000
Time MP+pooncerelease+poacquireonce 13.74
Thu Jul 17 18:13:40 UTC
[0] https://github.com/puranjaymohan/blitmus
[1] https://github.com/puranjaymohan/blitmus/blob/main/litmus_tests/MP%2Bpoonceonces.litmus
[2] https://github.com/puranjaymohan/blitmus/blob/main/litmus_tests/MP%2Bpooncerelease%2Bpoacquireonce.litmus
next prev parent reply other threads:[~2025-07-17 20:56 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20250717202935.29018-1-puranjay@kernel.org>
2025-07-17 20:29 ` [PATCH RESEND bpf-next 1/1] powerpc64/bpf: Add jit support for load_acquire and store_release Puranjay Mohan
2025-07-17 20:56 ` puranjay [this message]
2025-07-24 10:27 ` Saket Kumar Bhaskar
2025-07-27 17:29 ` Daniel Borkmann
2025-07-28 2:29 ` Madhavan Srinivasan
2025-07-24 8:50 ` Hari Bathini
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=mb61pfreuy1rm.fsf@kernel.org \
--to=puranjay@kernel.org \
--cc=andrii@kernel.org \
--cc=ast@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=christophe.leroy@csgroup.eu \
--cc=daniel@iogearbox.net \
--cc=eddyz87@gmail.com \
--cc=haoluo@google.com \
--cc=hbathini@linux.ibm.com \
--cc=john.fastabend@gmail.com \
--cc=jolsa@kernel.org \
--cc=kpsingh@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=lkmm@lists.linux.dev \
--cc=maddy@linux.ibm.com \
--cc=martin.lau@linux.dev \
--cc=memxor@gmail.com \
--cc=mpe@ellerman.id.au \
--cc=mykolal@fb.com \
--cc=naveen@kernel.org \
--cc=npiggin@gmail.com \
--cc=paulmck@kernel.org \
--cc=sdf@fomichev.me \
--cc=song@kernel.org \
--cc=yepeilin@google.com \
--cc=yonghong.song@linux.dev \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.