diff options
author | Alice Ryhl <aliceryhl@google.com> | 2024-08-14 08:05:28 +0000 |
---|---|---|
committer | Miguel Ojeda <ojeda@kernel.org> | 2024-08-23 06:26:57 +0200 |
commit | 2003c04b059759b0ec3bff108f24ded9de86a726 (patch) | |
tree | c6e6eabf0291c197be28bba47fa11655ebc40311 /sound/pci | |
parent | 9078a4f956dbef9366e1657915c883b380e6db39 (diff) |
rust: list: support heterogeneous lists
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>
Diffstat (limited to 'sound/pci')
0 files changed, 0 insertions, 0 deletions