aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/rust/kernel/task.rs
diff options
context:
space:
mode:
authorMark Brown <broonie@kernel.org>2023-07-17 06:12:31 +0100
committerMark Brown <broonie@kernel.org>2023-07-17 06:12:31 +0100
commit0791faebfe750292a8a842b64795a390ca4a3b51 (patch)
tree0e6095a5a0130398b0693bddfdc421c41eebda7c /rust/kernel/task.rs
parentMAINTAINERS: Redo addition of ssm3515 to APPLE SOUND (diff)
parentLinux 6.5-rc2 (diff)
downloadwireguard-linux-0791faebfe750292a8a842b64795a390ca4a3b51.tar.xz
wireguard-linux-0791faebfe750292a8a842b64795a390ca4a3b51.zip
ASoC: Merge v6.5-rc2
Get a similar baseline to my other branches, and fixes for people using the branch.
Diffstat (limited to 'rust/kernel/task.rs')
-rw-r--r--rust/kernel/task.rs10
1 files changed, 8 insertions, 2 deletions
diff --git a/rust/kernel/task.rs b/rust/kernel/task.rs
index 526d29a0ae27..7eda15e5f1b3 100644
--- a/rust/kernel/task.rs
+++ b/rust/kernel/task.rs
@@ -64,8 +64,14 @@ macro_rules! current {
#[repr(transparent)]
pub struct Task(pub(crate) Opaque<bindings::task_struct>);
-// SAFETY: It's OK to access `Task` through references from other threads because we're either
-// accessing properties that don't change (e.g., `pid`, `group_leader`) or that are properly
+// SAFETY: By design, the only way to access a `Task` is via the `current` function or via an
+// `ARef<Task>` obtained through the `AlwaysRefCounted` impl. This means that the only situation in
+// which a `Task` can be accessed mutably is when the refcount drops to zero and the destructor
+// runs. It is safe for that to happen on any thread, so it is ok for this type to be `Send`.
+unsafe impl Send for Task {}
+
+// SAFETY: It's OK to access `Task` through shared references from other threads because we're
+// either accessing properties that don't change (e.g., `pid`, `group_leader`) or that are properly
// synchronised by C code (e.g., `signal_pending`).
unsafe impl Sync for Task {}