linux/rust/kernel
Lyude Paul 15abc88057 rust: sync: Add Lock::from_raw() for Lock<(), B>
The KMS bindings [1] have a few bindings that require manually acquiring
specific locks before calling certain functions. At the moment though,
the only way of acquiring these locks in bindings is to simply call the
C locking functions directly - since said locks are not initialized on
the Rust side of things.

However - if we add `#[repr(C)]` to `Lock<(), B>`, then given `()` is a
ZST - `Lock<(), B>` becomes equivalent in data layout to its inner
`B::State` type. Since locks in C don't have data explicitly associated
with them anyway, we can take advantage of this to add a
`Lock::from_raw()` function that can translate a raw pointer to
`B::State` into its proper `Lock<(), B>` equivalent. This lets us simply
acquire a reference to the lock in question and work with it like it was
initialized on the Rust side of things, allowing us to use less unsafe
code to implement bindings with lock requirements.

[Boqun: Use "Link:" instead of a URL and format the commit log]

Signed-off-by: Lyude Paul <lyude@redhat.com>
Reviewed-by: Alice Ryhl <aliceryhl@google.com>
Link: https://patchwork.freedesktop.org/series/131522/ [1]
Signed-off-by: Boqun Feng <boqun.feng@gmail.com>
Link: https://lore.kernel.org/r/20241119231146.2298971-2-lyude@redhat.com
2024-12-19 14:04:42 -08:00
..
alloc rust: alloc: Fix ArrayLayout allocations 2024-11-25 00:11:07 +01:00
block block-6.13-20242901 2024-11-30 15:47:29 -08:00
fs rust: file: add FileDescriptorReservation 2024-09-30 13:02:29 +02:00
init rust: treewide: switch to our kernel Box type 2024-10-15 22:56:59 +02:00
list rust: enable arbitrary_self_types and remove Receiver 2024-10-07 21:39:57 +02:00
net Rust changes for v6.13 2024-11-26 14:00:26 -08:00
sync rust: sync: Add Lock::from_raw() for Lock<(), B> 2024-12-19 14:04:42 -08:00
.gitignore rust: jump_label: skip formatting generated file 2024-11-20 13:32:42 -05:00
alloc.rs rust: alloc: update module comment of alloc.rs 2024-10-15 23:10:32 +02:00
block.rs rust: block: introduce kernel::block::mq module 2024-06-14 07:45:04 -06:00
build_assert.rs rust: upgrade to Rust 1.68.2 2023-05-31 17:35:03 +02:00
cred.rs rust: file: add Kuid wrapper 2024-09-30 13:02:29 +02:00
device.rs rust: add dev_* print macros. 2024-11-05 05:33:46 +01:00
error.rs rust: use custom FFI integer types 2024-11-10 23:58:00 +01:00
firmware.rs rust: device: change the from_raw() function 2024-10-03 13:54:48 +02:00
fs.rs rust: file: add Rust abstraction for struct file 2024-09-30 13:02:28 +02:00
generated_arch_static_branch_asm.rs.S rust: jump_label: skip formatting generated file 2024-11-20 13:32:42 -05:00
init.rs rust: use custom FFI integer types 2024-11-10 23:58:00 +01:00
ioctl.rs rust: start using the #[expect(...)] attribute 2024-10-07 21:39:57 +02:00
jump_label.rs rust: jump_label: skip formatting generated file 2024-11-20 13:32:42 -05:00
kunit.rs rust: kunit: use C-string literals to clean warning 2024-10-01 23:46:42 +02:00
lib.rs Char/Misc/IIO/Whatever driver subsystem updates for 6.13-rc1 2024-11-29 11:58:27 -08:00
list.rs rust: enable clippy::undocumented_unsafe_blocks lint 2024-10-07 21:39:05 +02:00
miscdevice.rs rust: miscdevice: add missing safety comments 2024-10-22 15:53:15 +02:00
net.rs rust: core abstractions for network PHY drivers 2023-12-15 09:35:50 +00:00
page.rs rust: page: add Rust version of PAGE_ALIGN 2024-10-21 20:34:46 +02:00
pid_namespace.rs rust: add PidNamespace 2024-10-08 15:44:36 +02:00
prelude.rs Char/Misc/IIO/Whatever driver subsystem updates for 6.13-rc1 2024-11-29 11:58:27 -08:00
print.rs rust: start using the #[expect(...)] attribute 2024-10-07 21:39:57 +02:00
rbtree.rs rust: treewide: switch to our kernel Box type 2024-10-15 22:56:59 +02:00
security.rs rust: security: add abstraction for secctx 2024-09-30 13:02:28 +02:00
seq_file.rs rust: add seqfile abstraction 2024-10-08 14:32:39 +02:00
sizes.rs rust: sizes: add commonly used constants 2024-08-30 10:27:34 +01:00
static_assert.rs rust: static_assert: add static_assert! macro 2022-12-04 01:59:16 +01:00
std_vendor.rs rust: std_vendor: update dbg macro from Rust upstream 2024-10-10 00:33:42 +02:00
str.rs rust: use custom FFI integer types 2024-11-10 23:58:00 +01:00
sync.rs Rust changes for v6.13 2024-11-26 14:00:26 -08:00
task.rs rust: fix up formatting after merge 2024-11-26 17:54:58 -08:00
time.rs rust: use custom FFI integer types 2024-11-10 23:58:00 +01:00
tracepoint.rs rust: add tracepoint support 2024-11-04 16:21:44 -05:00
transmute.rs rust: kernel: move FromBytes and AsBytes traits to a new transmute module 2024-10-10 00:33:42 +02:00
types.rs Char/Misc/IIO/Whatever driver subsystem updates for 6.13-rc1 2024-11-29 11:58:27 -08:00
uaccess.rs rust: use custom FFI integer types 2024-11-10 23:58:00 +01:00
workqueue.rs rust: treewide: switch to our kernel Box type 2024-10-15 22:56:59 +02:00