linux/rust/kernel/sync/atomic.rs

25 lines
809 B
Rust
Raw Normal View History

// SPDX-License-Identifier: GPL-2.0
//! Atomic primitives.
//!
//! These primitives have the same semantics as their C counterparts: and the precise definitions of
//! semantics can be found at [`LKMM`]. Note that Linux Kernel Memory (Consistency) Model is the
//! only model for Rust code in kernel, and Rust's own atomics should be avoided.
//!
//! # Data races
//!
//! [`LKMM`] atomics have different rules regarding data races:
//!
//! - A normal write from C side is treated as an atomic write if
//! CONFIG_KCSAN_ASSUME_PLAIN_WRITES_ATOMIC=y.
//! - Mixed-size atomic accesses don't cause data races.
//!
//! [`LKMM`]: srctree/tools/memory-model/
#[allow(dead_code, unreachable_pub)]
mod internal;
pub mod ordering;
pub use internal::AtomicImpl;
pub use ordering::{Acquire, Full, Relaxed, Release};