Re: [PATCH bpf-next 2/2] libbpf, xsk: add libbpf_smp_store_release libbpf_smp_load_acquire
From: Björn Töpel <hidden>
Date: 2021-03-03 22:56:51
Also in:
bpf
On Tue, 2 Mar 2021 at 10:25, Daniel Borkmann [off-list ref] wrote:
[...]
quoted
I wonder if it's possible to cook a LKMM litmus test for this...?That would be amazing! :-)
With the help of Paul and Alan [1] (Thanks!) I've cooked 8 litmus tests for this [2]. The litmus tests is based on a one entry ring-buffer, and there are two scenarios. The ring is full, i.e. the producer has written an entry, so the consumer has to go first. The ring is empty, i.e. the producer has to go first. There is one test for each permutation: barrier only, acqrel only, acqrel+barrier, barrier+acqrel. According to these tests the code in this series is correct. Now, for the v2 some more wording/explanations are needed. Do you think I should include the litmus tests in the patch, or just refer to them? Paste parts of them into the cover?
(Another option which can be done independently could be to update [0] with outlining a pairing scenario as we have here describing the forward/backward compatibility on the barriers used, I think that would be quite useful as well.) [0] Documentation/memory-barriers.txt
Yeah, I agree. There is some information on it though in the "SMP BARRIER PAIRING" section: --8<-- General barriers pair with each other, though they also pair with most other types of barriers, albeit without multicopy atomicity. An acquire barrier pairs with a release barrier, but both may also pair with other barriers, including of course general barriers. A write barrier pairs with a data dependency barrier, a control dependency, an acquire barrier, a release barrier, a read barrier, or a general barrier. Similarly a read barrier, control dependency, or a data dependency barrier pairs with a write barrier, an acquire barrier, a release barrier, or a general barrier: -->8-- And there's the tools/memory-model/Documentation/cheatsheet.txt. That being said; In this case more is more. :-D Björn [1] https://lore.kernel.org/lkml/CAJ+HfNhxWFeKnn1aZw-YJmzpBuCaoeGkXXKn058GhY-6ZBDtZA@mail.gmail.com/ (local) [2] https://github.com/bjoto/litmus-xsk/commit/0db0dc426a7e1248f83e21f10f9e840f970f4cb7
quoted
quoted
Would also be great to get Will's ACK on that when you have a v2. :)Yup! :-) Björnquoted
Thanks, Daniel