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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).