This updates the vm_area_struct support to use the approach we discussed at LPC where there are several different Rust wrappers for vm_area_struct depending on the kind of access you have to the vma. Each case allows a different set of operations on the vma. This depends on several PULLs that have landed / are landing during the currently ongoing merge window. To: Miguel Ojeda <ojeda@xxxxxxxxxx> To: Matthew Wilcox <willy@xxxxxxxxxxxxx> To: Lorenzo Stoakes <lorenzo.stoakes@xxxxxxxxxx> To: Vlastimil Babka <vbabka@xxxxxxx> To: John Hubbard <jhubbard@xxxxxxxxxx> To: Liam R. Howlett <Liam.Howlett@xxxxxxxxxx> To: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> To: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx> To: Arnd Bergmann <arnd@xxxxxxxx> To: Christian Brauner <brauner@xxxxxxxxxx> To: Jann Horn <jannh@xxxxxxxxxx> To: Suren Baghdasaryan <surenb@xxxxxxxxxx> Cc: Alex Gaynor <alex.gaynor@xxxxxxxxx> Cc: Boqun Feng <boqun.feng@xxxxxxxxx> Cc: Gary Guo <gary@xxxxxxxxxxx> Cc: Björn Roy Baron <bjorn3_gh@xxxxxxxxxxxxxx> Cc: Benno Lossin <benno.lossin@xxxxxxxxx> Cc: Andreas Hindborg <a.hindborg@xxxxxxxxxx> Cc: Trevor Gross <tmgross@xxxxxxxxx> Cc: linux-kernel@xxxxxxxxxxxxxxx Cc: linux-mm@xxxxxxxxx Cc: rust-for-linux@xxxxxxxxxxxxxxx Cc: Alice Ryhl <aliceryhl@xxxxxxxxxx> Changes in v10: - Update docs for `set_io`. - Check address in `zap_page_range_single`. - Completely redo the last patch. - Link to v9: https://lore.kernel.org/r/20241122-vma-v9-0-7127bfcdd54e@xxxxxxxxxx Changes in v9: - Be more explicit about VmAreaNew being used with f_ops->mmap(). - Point out that clearing VM_MAYWRITE is irreversible. - Use __vm_flags to set the flags. - Use as_ and into_ prefixes for conversions. - Update lock_vma_under_rcu docs and commit msg - Mention that VmAreaRef::end is exclusive. - Reword docs for zap_page_range_single. - Minor fixes to flag docs. - Add way to access current->mm without a refcount increment. - Link to v8: https://lore.kernel.org/r/20241120-vma-v8-0-eb31425da66b@xxxxxxxxxx Changes in v8: - Split series into more commits to ease review. - Improve read locks based on Lorenzo's doc: either the mmap or vma lock can be used. - Get rid of mmap write lock because it's possible to avoid the need for it. - Do not allow invalid flag combinations on VmAreaNew. - Link to v7: https://lore.kernel.org/r/20241014-vma-v7-0-01e32f861195@xxxxxxxxxx Changes in v7: - Make the mmap read/write lock guards respect strict owner semantics. - Link to v6: https://lore.kernel.org/r/20241010-vma-v6-0-d89039b6f573@xxxxxxxxxx Changes in v6: - Introduce VmArea{Ref,Mut,New} distinction. - Add a second patchset for miscdevice. - Rebase on char-misc-next (currently on v6.12-rc2). - Link to v5: https://lore.kernel.org/r/20240806-vma-v5-1-04018f05de2b@xxxxxxxxxx Changes in v5: - Rename VmArea::from_raw_vma to from_raw. - Use Pin for mutable VmArea references. - Go through `ARef::from` in `mmgrab_current`. - Link to v4: https://lore.kernel.org/r/20240802-vma-v4-1-091a87058a43@xxxxxxxxxx Changes in v4: - Pull out ARef::into_raw into a separate patch. - Update invariants and struct documentation. - Rename from_raw_mm to from_raw. - Link to v3: https://lore.kernel.org/r/20240801-vma-v3-1-db6c1c0afda9@xxxxxxxxxx Changes in v3: - Reorder entries in mm.rs. - Use ARef for mmput_async helper. - Clarify that VmArea requires you to hold the mmap read or write lock. - Link to v2: https://lore.kernel.org/r/20240727-vma-v2-1-ab3e5927dc3a@xxxxxxxxxx Changes in v2: - mm.rs is redesigned from scratch making use of AsRef - Add notes about whether destructors may sleep - Rename Area to VmArea - Link to v1: https://lore.kernel.org/r/20240723-vma-v1-1-32ad5a0118ee@xxxxxxxxxx --- Alice Ryhl (8): mm: rust: add abstraction for struct mm_struct mm: rust: add vm_area_struct methods that require read access mm: rust: add vm_insert_page mm: rust: add lock_vma_under_rcu mm: rust: add mmput_async support mm: rust: add VmAreaNew for f_ops->mmap() rust: miscdevice: add mmap support task: rust: rework how current is accessed rust/helpers/helpers.c | 1 + rust/helpers/mm.c | 50 ++++++ rust/kernel/lib.rs | 1 + rust/kernel/miscdevice.rs | 28 +++ rust/kernel/mm.rs | 323 ++++++++++++++++++++++++++++++++++ rust/kernel/mm/virt.rs | 429 ++++++++++++++++++++++++++++++++++++++++++++++ rust/kernel/task.rs | 284 +++++++++++++++++------------- 7 files changed, 999 insertions(+), 117 deletions(-) --- base-commit: a62eb7bdef0b0009d1e141198e790fbc588ad0a1 change-id: 20240723-vma-f80119f9fb35 Best regards, -- Alice Ryhl <aliceryhl@xxxxxxxxxx>