mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/herbert/cryptodev-2.6.git
synced 2026-04-18 03:23:53 -04:00
kcsan: Add example to data_race() kerneldoc header
Although the data_race() kerneldoc header accurately states what it does, some of the implications and usage patterns are non-obvious. Therefore, add a brief locking example and also state how to have KCSAN ignore accesses while also preventing the compiler from folding, spindling, or otherwise mutilating the access. [ paulmck: Apply Bart Van Assche feedback. ] [ paulmck: Apply feedback from Marco Elver. ] Reported-by: Bart Van Assche <bvanassche@acm.org> Signed-off-by: Paul E. McKenney <paulmck@kernel.org> Cc: Marco Elver <elver@google.com> Cc: Breno Leitao <leitao@debian.org> Cc: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
@@ -194,9 +194,17 @@ void ftrace_likely_update(struct ftrace_likely_data *f, int val,
|
||||
* This data_race() macro is useful for situations in which data races
|
||||
* should be forgiven. One example is diagnostic code that accesses
|
||||
* shared variables but is not a part of the core synchronization design.
|
||||
* For example, if accesses to a given variable are protected by a lock,
|
||||
* except for diagnostic code, then the accesses under the lock should
|
||||
* be plain C-language accesses and those in the diagnostic code should
|
||||
* use data_race(). This way, KCSAN will complain if buggy lockless
|
||||
* accesses to that variable are introduced, even if the buggy accesses
|
||||
* are protected by READ_ONCE() or WRITE_ONCE().
|
||||
*
|
||||
* This macro *does not* affect normal code generation, but is a hint
|
||||
* to tooling that data races here are to be ignored.
|
||||
* to tooling that data races here are to be ignored. If the access must
|
||||
* be atomic *and* KCSAN should ignore the access, use both data_race()
|
||||
* and READ_ONCE(), for example, data_race(READ_ONCE(x)).
|
||||
*/
|
||||
#define data_race(expr) \
|
||||
({ \
|
||||
|
||||
Reference in New Issue
Block a user