• Alice Ryhl's avatar
    rust: add abstraction for `struct page` · fc6e66f4
    Alice Ryhl authored
    Adds a new struct called `Page` that wraps a pointer to `struct page`.
    This struct is assumed to hold ownership over the page, so that Rust
    code can allocate and manage pages directly.
    
    The page type has various methods for reading and writing into the page.
    These methods will temporarily map the page to allow the operation. All
    of these methods use a helper that takes an offset and length, performs
    bounds checks, and returns a pointer to the given offset in the page.
    
    This patch only adds support for pages of order zero, as that is all
    Rust Binder needs. However, it is written to make it easy to add support
    for higher-order pages in the future. To do that, you would add a const
    generic parameter to `Page` that specifies the order. Most of the
    methods do not need to be adjusted, as the logic for dealing with
    mapping multiple pages at once can be isolated to just the
    `with_pointer_into_page` method.
    
    Rust Binder needs to manage pages directly as that is how transactions
    are delivered: Each process has an mmap'd region for incoming
    transactions. When an incoming transaction arrives, the Binder driver
    will choose a region in the mmap, allocate and map the relevant pages
    manually, and copy the incoming transaction directly into the page. This
    architecture allows the driver to copy transactions directly from the
    address space of one process to another, without an intermediate copy
    to a kernel buffer.
    
    This code is based on Wedson's page abstractions from the old rust
    branch, but it has been modified by Alice by removing the incomplete
    support for higher-order pages, by introducing the `with_*` helpers
    to consolidate the bounds checking logic into a single place, and
    various other changes.
    Co-developed-by: default avatarWedson Almeida Filho <wedsonaf@gmail.com>
    Signed-off-by: default avatarWedson Almeida Filho <wedsonaf@gmail.com>
    Reviewed-by: default avatarAndreas Hindborg <a.hindborg@samsung.com>
    Reviewed-by: default avatarTrevor Gross <tmgross@umich.edu>
    Reviewed-by: default avatarBenno Lossin <benno.lossin@proton.me>
    Reviewed-by: default avatarBoqun Feng <boqun.feng@gmail.com>
    Signed-off-by: default avatarAlice Ryhl <aliceryhl@google.com>
    Link: https://lore.kernel.org/r/20240528-alice-mm-v7-4-78222c31b8f4@google.com
    [ Fixed typos and added a few intra-doc links. - Miguel ]
    Signed-off-by: default avatarMiguel Ojeda <ojeda@kernel.org>
    fc6e66f4
alloc.rs 2.63 KB