rust: sync: introduce `UniqueArc`
authorWedson Almeida Filho <wedsonaf@gmail.com>
Wed, 28 Dec 2022 06:03:45 +0000 (06:03 +0000)
committerMiguel Ojeda <ojeda@kernel.org>
Mon, 16 Jan 2023 22:48:06 +0000 (23:48 +0100)
commit70e42ebbf6416e8005d8e08ae521b7d5cc5a8b3a
tree7b53101eef75b58f2cd4142ea18b2c775c654dbc
parent92a655ae00a2f15fdd80eb96cd23526c0d8f0bfd
rust: sync: introduce `UniqueArc`

Since `Arc<T>` does not allow mutating `T` directly (i.e., without inner
mutability), it is currently not possible to do some initialisation of
`T` post construction but before being shared.

`UniqueArc<T>` addresses this problem essentially being an `Arc<T>` that
has a refcount of 1 and is therefore writable. Once initialisation is
completed, it can be transitioned (without failure paths) into an
`Arc<T>`.

Suggested-by: Gary Guo <gary@garyguo.net>
Signed-off-by: Wedson Almeida Filho <wedsonaf@gmail.com>
Reviewed-by: Alice Ryhl <aliceryhl@google.com>
Reviewed-by: Gary Guo <gary@garyguo.net>
Reviewed-by: Vincenzo Palazzo <vincenzopalazzodev@gmail.com>
Acked-by: Boqun Feng <boqun.feng@gmail.com>
Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
rust/kernel/sync.rs
rust/kernel/sync/arc.rs