mirror of
https://github.com/torvalds/linux.git
synced 2026-09-22 04:34:03 +02:00
rust: sync: Add abstraction for rcu_barrier()
rcu_barrier() is a frequently used C function which is always safe to be called. Add a safe abstraction for rcu_barrier(). Tested-by: Daniel Almeida <daniel.almeida@collabora.com> Signed-off-by: Philipp Stanner <phasta@kernel.org> Acked-by: Gary Guo <gary@garyguo.net> Reviewed-by: Onur Özkan <work@onurozkan.dev> Acked-by: Danilo Krummrich <dakr@kernel.org> Link: https://patch.msgid.link/20260805145949.938505-5-phasta@kernel.org [ Formatted documentation. Sorted tags. - Miguel ] Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
This commit is contained in:
parent
445ac1c805
commit
d8973c4754
|
|
@ -50,3 +50,23 @@ fn drop(&mut self) {
|
|||
pub fn read_lock() -> Guard {
|
||||
Guard::new()
|
||||
}
|
||||
|
||||
/// Wait until all in-flight `call_rcu()` callbacks complete.
|
||||
///
|
||||
/// Note that this primitive does not necessarily wait for an RCU grace period
|
||||
/// to complete. For example, if there are no RCU callbacks queued anywhere
|
||||
/// in the system, then [`rcu_barrier()`] is within its rights to return
|
||||
/// immediately, without waiting for anything, much less an RCU grace period.
|
||||
/// In fact, [`rcu_barrier()`] will normally not result in any RCU grace periods
|
||||
/// beyond those that were already destined to be executed.
|
||||
///
|
||||
/// In kernels built with `CONFIG_RCU_LAZY=y`, this function also hurries all
|
||||
/// pending lazy RCU callbacks.
|
||||
///
|
||||
/// Note that this is one of the RCU primitives which must not be called in
|
||||
/// atomic context.
|
||||
#[inline]
|
||||
pub fn rcu_barrier() {
|
||||
// SAFETY: `rcu_barrier()` is always safe to be called. It just might wait for a grace period.
|
||||
unsafe { bindings::rcu_barrier() };
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user