- Jan 04, 2023
-
-
Jonas Oberhauser authored
As reported by Viktor, plain accesses in LKMM are weaker than accesses to registers: the latter carry dependencies but the former do not. This is exemplified in the following snippet: int r = READ_ONCE(*x); WRITE_ONCE(*y, r); Here a data dependency links the READ_ONCE() to the WRITE_ONCE(), preserving their order, because the model treats r as a register. If r is turned into a memory location accessed by plain accesses, however, the link is broken and the order between READ_ONCE() and WRITE_ONCE() is no longer preserved. This is too conservative, since any optimizations on plain accesses that might break dependencies are also possible on registers; it also contradicts the intuitive notion of "dependency" as the data stored by the WRITE_ONCE() does depend on the data read by the READ_ONCE(), independently of whether r is a register or a memory location. This is resolved by redefining all dependencies to include dependencies carried by memory accesses; a dependency is said to be carried by memory accesses (in the model: carry-dep) from one load to another load if the initial load is followed by an arbitrarily long sequence alternating between stores and loads of the same thread, where the data of each store depends on the previous load, and is read by the next load. Any dependency linking the final load in the sequence to another access also links the initial load in the sequence to that access. More deep details can be found in this LKML discussion: https://lore.kernel.org/lkml/d86295788ad14a02874ab030ddb8a6f8@huawei.com/ Reported-by:
Viktor Vafeiadis <viktor@mpi-sws.org> Signed-off-by:
Jonas Oberhauser <jonas.oberhauser@huawei.com> Reviewed-by:
Alan Stern <stern@rowland.harvard.edu> Signed-off-by:
Paul E. McKenney <paulmck@kernel.org>
-
Alan Stern authored
Viktor (as relayed by Jonas) has pointed out a weakness in the Linux Kernel Memory Model. Namely, the memory ordering properties of atomic operations are not monotonic: An atomic op with full-barrier semantics does not always provide ordering as strong as one with release-barrier semantics. The following litmus test illustrates the problem: -------------------------------------------------- C atomics-not-monotonic {} P0(int *x, atomic_t *y) { WRITE_ONCE(*x, 1); smp_wmb(); atomic_set(y, 1); } P1(atomic_t *y) { int r1; r1 = atomic_inc_return(y); } P2(int *x, atomic_t *y) { int r2; int r3; r2 = atomic_read(y); smp_rmb(); r3 = READ_ONCE(*x); } exists (2:r2=2 /\ 2:r3=0) -------------------------------------------------- The litmus test is allowed as shown with atomic_inc_return(), which has full-barrier semantics. But if the operation is changed to atomic_inc_return_release(), which only has release-barrier semantics, the litmus test is forbidden. Clearly this violates monotonicity. The reason is because the LKMM treats full-barrier atomic ops as if they were written: mb(); load(); store(); mb(); (where the load() and store() are the two parts of an atomic RMW op), whereas it treats release-barrier atomic ops as if they were written: load(); release_barrier(); store(); The difference is that here the release barrier orders the load part of the atomic op before the store part with A-cumulativity, whereas the mb()'s above do not. This means that release-barrier atomics can effectively extend the cumul-fence relation but full-barrier atomics cannot. To resolve this problem we introduce the rmw-sequence relation, representing an arbitrarily long sequence of atomic RMW operations in which each operation reads from the previous one, and explicitly allow it to extend cumul-fence. This modification of the memory model is sound; it holds for PPC because of B-cumulativity, it holds for TSO and ARM64 because of other-multicopy atomicity, and we can assume that atomic ops on all other architectures will be implemented so as to make it hold for them. For similar reasons we also allow rmw-sequence to extend the w-post-bounded relation, which is analogous to cumul-fence in some ways. Reported-by:
Viktor Vafeiadis <viktor@mpi-sws.org> Signed-off-by:
Alan Stern <stern@rowland.harvard.edu> Reviewed-by:
Jonas Oberhauser <jonas.oberhauser@huawei.com> Signed-off-by:
Paul E. McKenney <paulmck@kernel.org>
-
- Oct 19, 2022
-
-
Paul Heidekrüger authored
The current informal control dependency definition in explanation.txt is too broad and, as discussed, needs to be updated. Consider the following example: > if(READ_ONCE(x)) > return 42; > > WRITE_ONCE(y, 42); > > return 21; The read event determines whether the write event will be executed "at all" - as per the current definition - but the formal LKMM does not recognize this as a control dependency. Introduce a new definition which includes the requirement for the second memory access event to syntactically lie within the arm of a non-loop conditional. Link: https://lore.kernel.org/all/20220615114330.2573952-1-paul.heidekrueger@in.tum.de/ Cc: Marco Elver <elver@google.com> Cc: Charalampos Mainas <charalampos.mainas@gmail.com> Cc: Pramod Bhatotia <pramod.bhatotia@in.tum.de> Cc: Soham Chakraborty <s.s.chakraborty@tudelft.nl> Cc: Martin Fink <martin.fink@in.tum.de> Co-developed-by:
Alan Stern <stern@rowland.harvard.edu> Signed-off-by:
Alan Stern <stern@rowland.harvard.edu> Signed-off-by:
Paul Heidekrüger <paul.heidekrueger@in.tum.de> Signed-off-by:
Paul E. McKenney <paulmck@kernel.org>
-
- Aug 31, 2022
-
-
Paul Heidekrüger authored
As discussed, clarify LKMM not recognizing certain kinds of orderings. In particular, highlight the fact that LKMM might deliberately make weaker guarantees than compilers and architectures. [ paulmck: Fix whitespace issue noted by checkpatch.pl. ] Link: https://lore.kernel.org/all/YpoW1deb%2FQeeszO1@ethstick13.dse.in.tum.de/T/#u Co-developed-by:
Alan Stern <stern@rowland.harvard.edu> Signed-off-by:
Alan Stern <stern@rowland.harvard.edu> Signed-off-by:
Paul Heidekrüger <paul.heidekrueger@in.tum.de> Reviewed-by:
Marco Elver <elver@google.com> Reviewed-by:
Joel Fernandes (Google) <joel@joelfernandes.org> Cc: Charalampos Mainas <charalampos.mainas@gmail.com> Cc: Pramod Bhatotia <pramod.bhatotia@in.tum.de> Cc: Soham Chakraborty <s.s.chakraborty@tudelft.nl> Cc: Martin Fink <martin.fink@in.tum.de> Signed-off-by:
Paul E. McKenney <paulmck@kernel.org>
-
- May 03, 2022
-
-
Akira Yokosawa authored
EXPORT_SYMBOL of do_exec() was removed in v5.17. Unfortunately, kernel modules from klitmus7 7.56 have do_exec() at the end of each kthread. herdtools7 7.56.1 has addressed the issue. Update the compatibility table accordingly. Signed-off-by:
Akira Yokosawa <akiyks@gmail.com> Cc: Luc Maranget <luc.maranget@inria.fr> Cc: Jade Alglave <j.alglave@ucl.ac.uk> Cc: stable@vger.kernel.org # v5.17+ Signed-off-by:
Paul E. McKenney <paulmck@kernel.org>
-
- Feb 02, 2022
-
-
Alan Stern authored
Paul Heidekrüger pointed out that the Linux Kernel Memory Model documentation doesn't mention the distinction between syntactic and semantic dependencies. This is an important difference, because the compiler can easily break dependencies that are only syntactic, not semantic. This patch adds a few paragraphs to the LKMM documentation explaining these issues and illustrating how they can matter. Suggested-by:
Paul Heidekrüger <paul.heidekrueger@in.tum.de> Reviewed-by:
Akira Yokosawa <akiyks@gmail.com> Signed-off-by:
Alan Stern <stern@rowland.harvard.edu> Signed-off-by:
Paul E. McKenney <paulmck@kernel.org>
-
- Dec 01, 2021
-
-
Boqun Feng authored
The memory model has been updated to provide a stronger ordering guarantee for unlock(A)+lock(B) on the same CPU/thread. Therefore add two litmus tests describing this new guarantee, these tests are simple yet can clearly show the usage of the new guarantee, also they can serve as the self tests for the modification in the model. Co-developed-by:
Alan Stern <stern@rowland.harvard.edu> Signed-off-by:
Alan Stern <stern@rowland.harvard.edu> Signed-off-by:
Boqun Feng <boqun.feng@gmail.com> Acked-by:
Peter Zijlstra (Intel) <peterz@infradead.org> Signed-off-by:
Paul E. McKenney <paulmck@kernel.org>
-
Boqun Feng authored
It's better that we have some "standard" about which test should be put in the litmus-tests directory because it helps future contributors understand whether they should work on litmus-tests in kernel or Paul's GitHub repo. Therefore explain a little bit on what a "representative" litmus test is. Signed-off-by:
Boqun Feng <boqun.feng@gmail.com> Acked-by:
Peter Zijlstra (Intel) <peterz@infradead.org> Signed-off-by:
Paul E. McKenney <paulmck@kernel.org>
-
Boqun Feng authored
A recent discussion[1] shows that we are in favor of strengthening the ordering of unlock + lock on the same CPU: a unlock and a po-after lock should provide the so-called RCtso ordering, that is a memory access S po-before the unlock should be ordered against a memory access R po-after the lock, unless S is a store and R is a load. The strengthening meets programmers' expection that "sequence of two locked regions to be ordered wrt each other" (from Linus), and can reduce the mental burden when using locks. Therefore add it in LKMM. [1]: https://lore.kernel.org/lkml/20210909185937.GA12379@rowland.harvard.edu/ Co-developed-by:
Alan Stern <stern@rowland.harvard.edu> Signed-off-by:
Alan Stern <stern@rowland.harvard.edu> Signed-off-by:
Boqun Feng <boqun.feng@gmail.com> Reviewed-by: Michael Ellerman <mpe@ellerman.id.au> (powerpc) Acked-by: Palmer Dabbelt <palmerdabbelt@google.com> (RISC-V) Acked-by:
Peter Zijlstra (Intel) <peterz@infradead.org> Signed-off-by:
Paul E. McKenney <paulmck@kernel.org>
-
- Jul 27, 2021
-
-
Paul E. McKenney authored
It is possible to cause KCSAN to ignore marked accesses by applying __no_kcsan to the function or applying data_race() to the marked accesses. These approaches allow the developer to restrict compiler optimizations while also causing KCSAN to ignore diagnostic accesses. This commit therefore updates the documentation accordingly. Signed-off-by:
Paul E. McKenney <paulmck@kernel.org>
-
Manfred Spraul authored
Data loaded for use by some sorts of heuristics can tolerate the occasional erroneous value. In this case the loads may use data_race() to give the compiler full freedom to optimize while also informing KCSAN of the intent. However, for this to work, the heuristic needs to be able to tolerate any erroneous value that could possibly arise. This commit therefore adds a paragraph spelling this out. Signed-off-by:
Manfred Spraul <manfred@colorfullife.com> Signed-off-by:
Paul E. McKenney <paulmck@kernel.org>
-
Paul E. McKenney authored
This commit adds example code for heuristic lockless reads, based loosely on the sem_lock() and sem_unlock() functions. [ paulmck: Apply Alan Stern and Manfred Spraul feedback. ] Reported-by:
Manfred Spraul <manfred@colorfullife.com> [ paulmck: Update per Manfred Spraul and Hillf Danton feedback. ] Signed-off-by:
Paul E. McKenney <paulmck@kernel.org>
-
- Jul 20, 2021
-
-
Paul E. McKenney authored
The current definition of read_foo_diagnostic() in the "Lock Protection With Lockless Diagnostic Access" section returns a value, which could be use for any purpose. This could mislead people into incorrectly using data_race() in cases where READ_ONCE() is required. This commit therefore makes read_foo_diagnostic() simply print the value read. Reported-by:
Manfred Spraul <manfred@colorfullife.com> Signed-off-by:
Paul E. McKenney <paulmck@kernel.org>
-
- May 11, 2021
-
-
Björn Töpel authored
A misspelled git-grep regex revealed that smp_mb__after_spinlock() was misspelled in explanation.txt. This commit adds the missing "_". Fixes: 1c27b644 ("Automate memory-barriers.txt; provide Linux-kernel memory model") [ paulmck: Apply Alan Stern commit-log feedback. ] Signed-off-by:
Björn Töpel <bjorn.topel@intel.com> Signed-off-by:
Paul E. McKenney <paulmck@kernel.org>
-
- Apr 06, 2021
-
-
Mauro Carvalho Chehab authored
Changeset b00aedf9 ("doc: Convert to rcu_dereference.txt to rcu_dereference.rst") renamed: Documentation/RCU/rcu_dereference.txt to: Documentation/RCU/rcu_dereference.rst. Update its cross-reference accordingly. Fixes: b00aedf9 ("doc: Convert to rcu_dereference.txt to rcu_dereference.rst") Signed-off-by:
Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
-
- Mar 15, 2021
-
-
Paul E. McKenney authored
This commit adapts the "Concurrency bugs should fear the big bad data-race detector (part 2)" LWN article (https://lwn.net/Articles/816854/ ) to kernel-documentation form. This allows more easily updating the material as needed. Suggested-by:
Thomas Gleixner <tglx@linutronix.de> [ paulmck: Apply Marco Elver feedback. ] [ paulmck: Update per Akira Yokosawa feedback. ] Reviewed-by:
Marco Elver <elver@google.com> Signed-off-by:
Paul E. McKenney <paulmck@kernel.org>
-
- Mar 08, 2021
-
-
Akira Yokosawa authored
atomic_ops.rst was removed by commit f0400a77 ("atomic: Delete obsolete documentation"). Remove the broken link in tools/memory-model/Documentation/simple.txt. Cc: Peter Zijlstra <peterz@infradead.org> Signed-off-by:
Akira Yokosawa <akiyks@gmail.com> Signed-off-by:
Paul E. McKenney <paulmck@kernel.org>
-
Mauro Carvalho Chehab authored
Changeset b00aedf9 ("doc: Convert to rcu_dereference.txt to rcu_dereference.rst") renamed: Documentation/RCU/rcu_dereference.txt to: Documentation/RCU/rcu_dereference.rst. Update its cross-reference accordingly. Signed-off-by:
Mauro Carvalho Chehab <mchehab+huawei@kernel.org> Signed-off-by:
Paul E. McKenney <paulmck@kernel.org>
-
- Jan 04, 2021
-
-
Akira Yokosawa authored
klitmus7 of herdtools7 7.48 or earlier depends on ACCESS_ONCE(), which was removed in Linux v4.15. Fix the obvious typo in the table. Fixes: d075a78a ("tools/memory-model/README: Expand dependency of klitmus7") Signed-off-by:
Akira Yokosawa <akiyks@gmail.com> Signed-off-by:
Paul E. McKenney <paulmck@kernel.org>
-
Akira Yokosawa authored
This is a revert of commit 1947bfcf ("tools/memory-model: Add types to litmus tests") with conflict resolutions. klitmus7 [1] is aware of default types of "int" and "int*". It accepts litmus tests for herd7 without extra type info unless non-"int" variables are referenced by an "exists", "locations", or "filter" directive. [1]: Tested with klitmus7 versions 7.49 or later. Suggested-by:
Paul E. McKenney <paulmck@kernel.org> Signed-off-by:
Akira Yokosawa <akiyks@gmail.com> Signed-off-by:
Paul E. McKenney <paulmck@kernel.org>
-
Paul E. McKenney authored
This commit explicitly makes the connection between acquire loads and the reads-from relation. It also adds an entry for happens-before, and refers to the corresponding section of explanation.txt. Reported-by:
Boqun Feng <boqun.feng@gmail.com> Signed-off-by:
Paul E. McKenney <paulmck@kernel.org>
-
- Nov 07, 2020
-
-
Paul E. McKenney authored
This commit adds comments that label the MP tests' producer and consumer processes, and also that label the "exists" clause as the bad outcome. Reported-by:
Johannes Weiner <hannes@cmpxchg.org> Signed-off-by:
Paul E. McKenney <paulmck@kernel.org>
-
Paul E. McKenney authored
The use of "x" and "y" for message-passing tests is fine for people familiar with memory models and litmus-test nomenclature, but is a bit obtuse for others. This commit therefore substitutes "buf" for "x" and "flag" for "y" for the MP tests. There are a few special-case MP tests that use locks and these are unchanged. There is another MP test that uses pointers, and this is changed to name the pointer "p". Reported-by:
Johannes Weiner <hannes@cmpxchg.org> Signed-off-by:
Paul E. McKenney <paulmck@kernel.org>
-
Paul E. McKenney authored
This commit adds type information for global variables in the litmus tests in order to allow easier use with klitmus7. Signed-off-by:
Paul E. McKenney <paulmck@kernel.org>
-
Paul E. McKenney authored
[ paulmck: Apply Alan Stern feedback. ] Signed-off-by:
Paul E. McKenney <paulmck@kernel.org>
-
Paul E. McKenney authored
The Linux kernel has a number of categories of ordering primitives, which are recorded in the LKMM implementation and hinted at by cheatsheet.txt. But there is no overview of these categories, and such an overview is needed in order to understand multithreaded LKMM litmus tests. This commit therefore adds an ordering.txt as well as extracting a control-dependencies.txt from memory-barriers.txt. It also updates the README file. [ paulmck: Apply Akira Yokosawa file-placement feedback. ] [ paulmck: Apply Alan Stern feedback. ] [ paulmck: Apply self-review feedback. ] Signed-off-by:
Paul E. McKenney <paulmck@kernel.org>
-
- Oct 27, 2020
-
-
Paul E. McKenney authored
This commit moves the descriptions of the files residing in tools/memory-model/Documentation to a README file in that directory, leaving behind the description of tools/memory-model/Documentation/README itself. After this change, tools/memory-model/Documentation/README provides a guide to the files in the tools/memory-model/Documentation directory, guiding people with different skills and needs to the most appropriate starting point. Signed-off-by:
Paul E. McKenney <paulmck@kernel.org>
-
Alan Stern authored
Add a small section to the litmus-tests.txt documentation file for the Linux Kernel Memory Model explaining that the memory model often fails to recognize certain control dependencies. Suggested-by:
Akira Yokosawa <akiyks@gmail.com> Signed-off-by:
Alan Stern <stern@rowland.harvard.edu> Reviewed-by:
Joel Fernandes (Google) <joel@joelfernandes.org> Signed-off-by:
Paul E. McKenney <paulmck@kernel.org>
-
- Sep 04, 2020
-
-
Paul E. McKenney authored
This commit adds a key entry enumerating the various types of relaxed operations. While in the area, it also renames the relaxed rows. [ paulmck: Apply Boqun Feng feedback. ] Acked-by:
Boqun Feng <boqun.feng@gmail.com> Signed-off-by:
Paul E. McKenney <paulmck@kernel.org>
-
- Sep 03, 2020
-
-
Paul E. McKenney authored
Current LKMM documentation assumes that the reader already understands concurrency in the Linux kernel, which won't necessarily always be the case. This commit supplies a simple.txt file that provides a starting point for someone who is new to concurrency in the Linux kernel. That said, this file might also useful as a reminder to experienced developers of simpler approaches to dealing with concurrency. Link: Link: https://lwn.net/Articles/827180/ [ paulmck: Apply feedback from Joel Fernandes. ] Co-developed-by:
Dave Chinner <dchinner@redhat.com> Signed-off-by:
Dave Chinner <dchinner@redhat.com> Co-developed-by:
Paul E. McKenney <paulmck@kernel.org> Signed-off-by:
Paul E. McKenney <paulmck@kernel.org>
-
Paul E. McKenney authored
The current LKMM documentation says very little about litmus tests, and worse yet directs people to the herd7 documentation for more information. Now, the herd7 documentation is quite voluminous and educational, but it is intended for people creating and modifying memory models, not those attempting to use them. This commit therefore updates README and creates a litmus-tests.txt file that gives an overview of litmus-test format and describes ways of modeling various special cases, illustrated with numerous examples. [ paulmck: Add Alan Stern feedback. ] [ paulmck: Apply Dave Chinner feedback. ] [ paulmck: Apply Andrii Nakryiko feedback. ] [ paulmck: Apply Johannes Weiner feedback. ] Link: https://lwn.net/Articles/827180/ Reported-by:
Dave Chinner <david@fromorbit.com> Acked-by:
Peter Zijlstra (Intel) <peterz@infradead.org> Signed-off-by:
Paul E. McKenney <paulmck@kernel.org>
-
Paul E. McKenney authored
The expand_to_next_prime() and next_prime_number() functions have moved from lib/prime_numbers.c to lib/math/prime_numbers.c, so this commit updates recipes.txt to reflect this change. Signed-off-by:
Paul E. McKenney <paulmck@kernel.org>
-
Alexander A. Klimov authored
Rationale: Reduces attack surface on kernel devs opening the links for MITM as HTTPS traffic is much harder to manipulate. Deterministic algorithm: For each file: If not .svg: For each line: If doesn't contain `\bxmlns\b`: For each link, `\bhttp://[^# \t\r\n]*(?:\w|/)`: If both the HTTP and HTTPS versions return 200 OK and serve the same content: Replace HTTP with HTTPS. Signed-off-by:
Alexander A. Klimov <grandmaster@al2klimov.de> Signed-off-by:
Paul E. McKenney <paulmck@kernel.org>
-
- Jul 21, 2020
-
-
Will Deacon authored
smp_read_barrier_depends() has gone the way of mmiowb() and so many esoteric memory barriers before it. Drop the two mentions of this deceased barrier from the LKMM informal explanation document. Acked-by:
Peter Zijlstra (Intel) <peterz@infradead.org> Acked-by:
Alan Stern <stern@rowland.harvard.edu> Acked-by:
Paul E. McKenney <paulmck@kernel.org> Signed-off-by:
Will Deacon <will@kernel.org>
-
- Jun 29, 2020
-
-
Akira Yokosawa authored
herdtools7 7.56 is going to be released in the week of 22 Jun 2020. This commit therefore adds the exact version in the compatibility table. Acked-by:
Andrea Parri <parri.andrea@gmail.com> Signed-off-by:
Akira Yokosawa <akiyks@gmail.com> Signed-off-by:
Paul E. McKenney <paulmck@kernel.org>
-
Akira Yokosawa authored
klitmus7 is independent of the memory model but depends on the build-target kernel release. It occasionally lost compatibility due to kernel API changes [1, 2, 3]. It was remedied in a backwards-compatible manner respectively [4, 5, 6]. Reflect this fact in README. [1]: b899a850 ("compiler.h: Remove ACCESS_ONCE()") [2]: 0bb95f80 ("Makefile: Globally enable VLA warning") [3]: d56c0d45 ("proc: decouple proc from VFS with "struct proc_ops"") [4]: https://github.com/herd/herdtools7/commit/e87d7f9287d1 ("klitmus: Use WRITE_ONCE and READ_ONCE in place of deprecated ACCESS_ONCE") [5]: https://github.com/herd/herdtools7/commit/a0cbb10d02be ("klitmus: Avoid variable length array") [6]: https://github.com/herd/herdtools7/commit/46b9412d3a58 ("klitmus: Linux kernel v5.6.x compat") NOTE: [5] was ahead of herdtools7 7.53, which did not make an official release. Code generated by klitmus7 without [5] can still be built targeting Linux 4.20--5.5 if you don't care VLA warnings. Acked-by:
Andrea Parri <parri.andrea@gmail.com> Signed-off-by:
Akira Yokosawa <akiyks@gmail.com> Signed-off-by:
Paul E. McKenney <paulmck@kernel.org>
-
Akira Yokosawa authored
The name of litmus test doesn't match the one described below. Fix the name of litmus test. Acked-by:
Andrea Parri <parri.andrea@gmail.com> Acked-by:
Joel Fernandes (Google) <joel@joelfernandes.org> Signed-off-by:
Akira Yokosawa <akiyks@gmail.com> Signed-off-by:
Paul E. McKenney <paulmck@kernel.org>
-
Boqun Feng authored
According to Luc, atomic_add_unless() is directly provided by herd7, therefore it can be used in litmus tests. So change the limitation section in README to unlimit the use of atomic_add_unless(). Cc: Luc Maranget <luc.maranget@inria.fr> Acked-by:
Andrea Parri <parri.andrea@gmail.com> Reviewed-by:
Joel Fernandes (Google) <joel@joelfernandes.org> Signed-off-by:
Boqun Feng <boqun.feng@gmail.com> Signed-off-by:
Paul E. McKenney <paulmck@kernel.org>
-
Marco Elver authored
The definition of "conflict" should not include the type of access nor whether the accesses are concurrent or not, which this patch addresses. The definition of "data race" remains unchanged. The definition of "conflict" as we know it and is cited by various papers on memory consistency models appeared in [1]: "Two accesses to the same variable conflict if at least one is a write; two operations conflict if they execute conflicting accesses." The LKMM as well as the C11 memory model are adaptations of data-race-free, which are based on the work in [2]. Necessarily, we need both conflicting data operations (plain) and synchronization operations (marked). For example, C11's definition is based on [3], which defines a "data race" as: "Two memory operations conflict if they access the same memory location, and at least one of them is a store, atomic store, or atomic read-modify-write operation. In a sequentially consistent execution, two memory operations from different threads form a type 1 data race if they conflict, at least one of them is a data operation, and they are adjacent in <T (i.e., they may be executed concurrently)." [1] D. Shasha, M. Snir, "Efficient and Correct Execution of Parallel Programs that Share Memory", 1988. URL: http://snir.cs.illinois.edu/listed/J21.pdf [2] S. Adve, "Designing Memory Consistency Models for Shared-Memory Multiprocessors", 1993. URL: http://sadve.cs.illinois.edu/Publications/thesis.pdf [3] H.-J. Boehm, S. Adve, "Foundations of the C++ Concurrency Memory Model", 2008. URL: https://www.hpl.hp.com/techreports/2008/HPL-2008-56.pdf Signed-off-by:
Marco Elver <elver@google.com> Co-developed-by:
Alan Stern <stern@rowland.harvard.edu> Signed-off-by:
Alan Stern <stern@rowland.harvard.edu> Acked-by:
Andrea Parri <parri.andrea@gmail.com> Signed-off-by:
Paul E. McKenney <paulmck@kernel.org>
-
Paul E. McKenney authored
This commit updates the list of LKMM-related publications in Documentation/references.txt. Signed-off-by:
Paul E. McKenney <paulmck@kernel.org> Acked-by:
Andrea Parri <parri.andrea@gmail.com>
-