On Thu, 25 Jul 2024 14:27:34 +0000 Alice Ryhl <aliceryhl@xxxxxxxxxx> wrote: > This introduces a new marker type for types that shouldn't be thread > safe. By adding a field of this type to a struct, it becomes non-Send > and non-Sync, which means that it cannot be accessed in any way from > threads other than the one it was created on. > > This is useful for APIs that require globals such as `current` to remain > constant while the value exists. > > We update two existing users in the Kernel to use this helper: > > * `Task::current()` - moving the return type of this value to a > different thread would not be safe as you can no longer be guaranteed > that the `current` pointer remains valid. > * Lock guards. Mutexes and spinlocks should be unlocked on the same > thread as where they were locked, so we enforce this using the Send > trait. > > There are also additional users in later patches of this patchset. See > [1] and [2] for the discussion that led to the introduction of this > patch. > > Link: https://lore.kernel.org/all/nFDPJFnzE9Q5cqY7FwSMByRH2OAn_BpI4H53NQfWIlN6I2qfmAqnkp2wRqn0XjMO65OyZY4h6P4K2nAGKJpAOSzksYXaiAK_FoH_8QbgBI4=@proton.me/ [1] > Link: https://lore.kernel.org/all/nFDPJFnzE9Q5cqY7FwSMByRH2OAn_BpI4H53NQfWIlN6I2qfmAqnkp2wRqn0XjMO65OyZY4h6P4K2nAGKJpAOSzksYXaiAK_FoH_8QbgBI4=@proton.me/ [2] > Suggested-by: Benno Lossin <benno.lossin@xxxxxxxxx> > Reviewed-by: Benno Lossin <benno.lossin@xxxxxxxxx> > Reviewed-by: Trevor Gross <tmgross@xxxxxxxxx> > Reviewed-by: Martin Rodriguez Reboredo <yakoyoku@xxxxxxxxx> > Reviewed-by: Björn Roy Baron <bjorn3_gh@xxxxxxxxxxxxxx> > Signed-off-by: Alice Ryhl <aliceryhl@xxxxxxxxxx> Reviewed-by: Gary Guo <gary@xxxxxxxxxxx> > --- > rust/kernel/sync/lock.rs | 13 +++++++++---- > rust/kernel/task.rs | 10 ++++++---- > rust/kernel/types.rs | 21 +++++++++++++++++++++ > 3 files changed, 36 insertions(+), 8 deletions(-)