mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-09-04 20:19:47 +08:00
![]() Support linked lists that can hold many different structs at once. This is generally done using trait objects. The main challenge is figuring what the struct is given only a pointer to the ListLinks. We do this by storing a pointer to the struct next to the ListLinks field. The container_of operation will then just read that pointer. When the type is a trait object, that pointer will be a fat pointer whose metadata is a vtable that tells you what kind of struct it is. Heterogeneous lists are heavily used by Rust Binder. There are a lot of so-called todo lists containing various events that need to be delivered to userspace next time userspace calls into the driver. And there are quite a few different todo item types: incoming transaction, changes to refcounts, death notifications, and more. Reviewed-by: Benno Lossin <benno.lossin@proton.me> Signed-off-by: Alice Ryhl <aliceryhl@google.com> Link: https://lore.kernel.org/r/20240814-linked-list-v5-9-f5f5e8075da0@google.com Signed-off-by: Miguel Ojeda <ojeda@kernel.org> |
||
---|---|---|
.. | ||
alloc | ||
block | ||
init | ||
list | ||
net | ||
sync | ||
alloc.rs | ||
block.rs | ||
build_assert.rs | ||
device.rs | ||
error.rs | ||
firmware.rs | ||
init.rs | ||
ioctl.rs | ||
kunit.rs | ||
lib.rs | ||
list.rs | ||
net.rs | ||
page.rs | ||
prelude.rs | ||
print.rs | ||
static_assert.rs | ||
std_vendor.rs | ||
str.rs | ||
sync.rs | ||
task.rs | ||
time.rs | ||
types.rs | ||
uaccess.rs | ||
workqueue.rs |