• Alice Ryhl's avatar
    rust: list: support heterogeneous lists · 2003c04b
    Alice Ryhl authored
    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: default avatarBenno Lossin <benno.lossin@proton.me>
    Signed-off-by: default avatarAlice Ryhl <aliceryhl@google.com>
    Link: https://lore.kernel.org/r/20240814-linked-list-v5-9-f5f5e8075da0@google.comSigned-off-by: default avatarMiguel Ojeda <ojeda@kernel.org>
    2003c04b
impl_list_item_mod.rs 13.7 KB