]> git.ipfire.org Git - thirdparty/kernel/stable.git/commit
rust: lock: add `Guard::do_unlocked`
authorWedson Almeida Filho <walmeida@microsoft.com>
Mon, 27 Mar 2023 18:43:08 +0000 (15:43 -0300)
committerMiguel Ojeda <ojeda@kernel.org>
Fri, 21 Apr 2023 23:46:30 +0000 (01:46 +0200)
commite32cca32c3d452a277884502b9155f3325caf80e
tree23cb2737222c1585c8ac6a0c2e64045503f28c69
parent7b1f55e3a984aaed0121f90f9f8580f18b7b561e
rust: lock: add `Guard::do_unlocked`

It releases the lock, executes some function provided by the caller,
then reacquires the lock. This is preparation for the implementation of
condvars, which will sleep after between unlocking and relocking.

We need an explicit `relock` method for primitives like `SpinLock` that
have an irqsave variant: we use the guard state to determine if the lock
was originally acquired with the regular `lock` function or
`lock_irqsave`.

Reviewed-by: Martin Rodriguez Reboredo <yakoyoku@gmail.com>
Signed-off-by: Wedson Almeida Filho <walmeida@microsoft.com>
Link: https://lore.kernel.org/rust-for-linux/20230412121431.41627-1-wedsonaf@gmail.com/
[ Removed the irqsave bits as discussed. ]
Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
rust/kernel/sync/lock.rs
rust/kernel/sync/lock/spinlock.rs