summaryrefslogtreecommitdiffstats
path: root/tools/memory-model
diff options
context:
space:
mode:
authorManfred Spraul <manfred@colorfullife.com>2021-05-14 11:40:06 -0700
committerPaul E. McKenney <paulmck@kernel.org>2021-07-27 11:48:55 -0700
commitf92975d76d537c06a2118f9c3c63432c0f7c7a88 (patch)
treedd517af260177be87f5e6971b0392296bd101471 /tools/memory-model
parent436eef23c41fe10dc34ed19a00caf9f1290a8689 (diff)
downloadlinux-stable-f92975d76d537c06a2118f9c3c63432c0f7c7a88.tar.gz
linux-stable-f92975d76d537c06a2118f9c3c63432c0f7c7a88.tar.bz2
linux-stable-f92975d76d537c06a2118f9c3c63432c0f7c7a88.zip
tools/memory-model: Heuristics using data_race() must handle all values
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>
Diffstat (limited to 'tools/memory-model')
-rw-r--r--tools/memory-model/Documentation/access-marking.txt5
1 files changed, 5 insertions, 0 deletions
diff --git a/tools/memory-model/Documentation/access-marking.txt b/tools/memory-model/Documentation/access-marking.txt
index d96fe20ed582..82a489988726 100644
--- a/tools/memory-model/Documentation/access-marking.txt
+++ b/tools/memory-model/Documentation/access-marking.txt
@@ -126,6 +126,11 @@ consistent errors, which in turn are quite capable of breaking heuristics.
Therefore use of data_race() should be limited to cases where some other
code (such as a barrier() call) will force the occasional reload.
+Note that this use case requires that the heuristic be able to handle
+any possible error. In contrast, if the heuristics might be fatally
+confused by one or more of the possible erroneous values, use READ_ONCE()
+instead of data_race().
+
In theory, plain C-language loads can also be used for this use case.
However, in practice this will have the disadvantage of causing KCSAN
to generate false positives because KCSAN will have no way of knowing