On Thu, Mar 26, 2020 at 10:40:18AM +0800, Boqun Feng wrote: > A recent discussion raises up the requirement for having test cases for > atomic APIs: > > https://lore.kernel.org/lkml/20200213085849.GL14897@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/ > > , and since we already have a way to generate a test module from a > litmus test with klitmus[1]. It makes sense that we add more litmus > tests for atomic APIs. And based on the previous discussion, I create a > new directory Documentation/atomic-tests and put these litmus tests > here. > > This patchset starts the work by adding the litmus tests which are > already used in atomic_t.txt, and also improve the atomic_t.txt to make > it consistent with the litmus tests. > > Previous version: > v1: https://lore.kernel.org/linux-doc/20200214040132.91934-1-boqun.feng@xxxxxxxxx/ > v2: https://lore.kernel.org/lkml/20200219062627.104736-1-boqun.feng@xxxxxxxxx/ > v3: https://lore.kernel.org/linux-doc/20200227004049.6853-1-boqun.feng@xxxxxxxxx/ For full series: Reviewed-by: Joel Fernandes (Google) <joel@xxxxxxxxxxxxxxxxx> One question I had was in the existing atomic_set() documentation, it talks about atomic_add_unless() implementation based on locking could have issues. It says the way to fix such cases is: Quote: the typical solution is to then implement atomic_set{}() with atomic_xchg(). I didn't get how using atomic_xchg() fixes it. Is the assumption there that atomic_xchg() would be implemented using locking to avoid atomic_set() having issues? If so, we could clarify that in the document. thanks, - Joel > > Changes since v3: > > * Merge two patches on atomic-set litmus test into one as per > Alan. (Alan, you have acked only one of the two patches, so I > don't add you acked-by for the combined patch). > > * Move the atomic litmus tests into litmus-tests/atomic to align > with Joel's recent patches on RCU litmus tests. > > I think we still haven't reach to a conclusion for the difference of > atomic_add_unless() in herdtools, and I'm currently reading the source > code of herd to resovle this. This is just an updated version to resolve > ealier comments and react on Joel's RCU litmus tests. > > Regards, > Boqun > > [1]: http://diy.inria.fr/doc/litmus.html#klitmus > > Boqun Feng (4): > tools/memory-model: Add an exception for limitations on _unless() > family > Documentation/litmus-tests: Introduce atomic directory > Documentation/litmus-tests/atomic: Add a test for atomic_set() > Documentation/litmus-tests/atomic: Add a test for > smp_mb__after_atomic() > > Documentation/atomic_t.txt | 24 +++++++------- > ...ter_atomic-is-stronger-than-acquire.litmus | 32 +++++++++++++++++++ > ...c-RMW-ops-are-atomic-WRT-atomic_set.litmus | 24 ++++++++++++++ > Documentation/litmus-tests/atomic/README | 16 ++++++++++ > tools/memory-model/README | 10 ++++-- > 5 files changed, 91 insertions(+), 15 deletions(-) > create mode 100644 Documentation/litmus-tests/atomic/Atomic-RMW+mb__after_atomic-is-stronger-than-acquire.litmus > create mode 100644 Documentation/litmus-tests/atomic/Atomic-RMW-ops-are-atomic-WRT-atomic_set.litmus > create mode 100644 Documentation/litmus-tests/atomic/README > > -- > 2.25.1 >