rust/helpers/helpers.c | 1 + rust/helpers/mm.c | 50 ++++++ rust/kernel/lib.rs | 1 + rust/kernel/miscdevice.rs | 37 ++++ rust/kernel/mm.rs | 323 ++++++++++++++++++++++++++++++++++ rust/kernel/mm/virt.rs | 439 ++++++++++++++++++++++++++++++++++++++++++++++ rust/kernel/task.rs | 284 ++++++++++++++++++------------ 7 files changed, 1018 insertions(+), 117 deletions(-)
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. Patch 8 in particular could use review. To: Miguel Ojeda <ojeda@kernel.org> To: Matthew Wilcox <willy@infradead.org> To: Lorenzo Stoakes <lorenzo.stoakes@oracle.com> To: Vlastimil Babka <vbabka@suse.cz> To: John Hubbard <jhubbard@nvidia.com> To: Liam R. Howlett <Liam.Howlett@oracle.com> To: Andrew Morton <akpm@linux-foundation.org> To: Greg Kroah-Hartman <gregkh@linuxfoundation.org> To: Arnd Bergmann <arnd@arndb.de> To: Christian Brauner <brauner@kernel.org> To: Jann Horn <jannh@google.com> To: Suren Baghdasaryan <surenb@google.com> Cc: Alex Gaynor <alex.gaynor@gmail.com> Cc: Boqun Feng <boqun.feng@gmail.com> Cc: Gary Guo <gary@garyguo.net> Cc: Björn Roy Baron <bjorn3_gh@protonmail.com> Cc: Benno Lossin <benno.lossin@proton.me> Cc: Andreas Hindborg <a.hindborg@kernel.org> Cc: Trevor Gross <tmgross@umich.edu> Cc: linux-kernel@vger.kernel.org Cc: linux-mm@kvack.org Cc: rust-for-linux@vger.kernel.org Cc: Alice Ryhl <aliceryhl@google.com> Changes in v11: - Add accessor for the vm_mm field of vm_area_struct. - Pass the file to MiscDevice::mmap for consistency with https://lore.kernel.org/r/20241210-miscdevice-file-param-v3-1-b2a79b666dc5@google.com - Link to v10: https://lore.kernel.org/r/20241129-vma-v10-0-4dfff05ba927@google.com 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@google.com 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@google.com 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@google.com 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@google.com 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@google.com 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@google.com 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@google.com 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@google.com 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@google.com --- 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 | 37 ++++ rust/kernel/mm.rs | 323 ++++++++++++++++++++++++++++++++++ rust/kernel/mm/virt.rs | 439 ++++++++++++++++++++++++++++++++++++++++++++++ rust/kernel/task.rs | 284 ++++++++++++++++++------------ 7 files changed, 1018 insertions(+), 117 deletions(-) --- base-commit: fac04efc5c793dccbd07e2d59af9f90b7fc0dca4 change-id: 20240723-vma-f80119f9fb35 Best regards, -- Alice Ryhl <aliceryhl@google.com>
On Wed, Dec 11, 2024 at 11:37 AM Alice Ryhl <aliceryhl@google.com> wrote: > > 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. > > Patch 8 in particular could use review. > > To: Miguel Ojeda <ojeda@kernel.org> > To: Matthew Wilcox <willy@infradead.org> > To: Lorenzo Stoakes <lorenzo.stoakes@oracle.com> > To: Vlastimil Babka <vbabka@suse.cz> > To: John Hubbard <jhubbard@nvidia.com> > To: Liam R. Howlett <Liam.Howlett@oracle.com> > To: Andrew Morton <akpm@linux-foundation.org> > To: Greg Kroah-Hartman <gregkh@linuxfoundation.org> > To: Arnd Bergmann <arnd@arndb.de> > To: Christian Brauner <brauner@kernel.org> > To: Jann Horn <jannh@google.com> > To: Suren Baghdasaryan <surenb@google.com> > Cc: Alex Gaynor <alex.gaynor@gmail.com> > Cc: Boqun Feng <boqun.feng@gmail.com> > Cc: Gary Guo <gary@garyguo.net> > Cc: Björn Roy Baron <bjorn3_gh@protonmail.com> > Cc: Benno Lossin <benno.lossin@proton.me> > Cc: Andreas Hindborg <a.hindborg@kernel.org> > Cc: Trevor Gross <tmgross@umich.edu> > Cc: linux-kernel@vger.kernel.org > Cc: linux-mm@kvack.org > Cc: rust-for-linux@vger.kernel.org > Cc: Alice Ryhl <aliceryhl@google.com> When I sent this series, b4 put the changelog stub for v12 above the cover letter for some reason. Also, I'm not sure why the list of recipients were included in the cover letter. Any ideas what I'm doing wrong? This is what I sent: https://github.com/Darksonn/linux/tree/b4/vma-v11 Alice
On Wed, Dec 11, 2024 at 11:47:41AM +0100, Alice Ryhl wrote: > When I sent this series, b4 put the changelog stub for v12 above the > cover letter for some reason. Also, I'm not sure why the list of > recipients were included in the cover letter. Any ideas what I'm doing > wrong? Yes, and it's a common gotcha that I don't know how to properly address. For the moment, we use "---" lines to indicate the main sections of the cover letter. There are three main sections: The main message --- Additional information --- The basement Looks like you removed the "---" between the changelog and the main message, which causes b4 to stop properly parsing the cover letter. I'm open to suggestions on how to make this less fragile, short of "use AI to figure out what part of the cover letter does what." -K
On Thu, Dec 12, 2024 at 3:47 PM Konstantin Ryabitsev <konstantin@linuxfoundation.org> wrote: > > On Wed, Dec 11, 2024 at 11:47:41AM +0100, Alice Ryhl wrote: > > When I sent this series, b4 put the changelog stub for v12 above the > > cover letter for some reason. Also, I'm not sure why the list of > > recipients were included in the cover letter. Any ideas what I'm doing > > wrong? > > Yes, and it's a common gotcha that I don't know how to properly address. For > the moment, we use "---" lines to indicate the main sections of the cover > letter. There are three main sections: > > The main message > > --- > > Additional information > > --- > > The basement > > Looks like you removed the "---" between the changelog and the main message, > which causes b4 to stop properly parsing the cover letter. > > I'm open to suggestions on how to make this less fragile, short of "use AI to > figure out what part of the cover letter does what." Could you print an error if the --- is missing, that is, if the number of sections is incorrect? Alice
On Fri, Dec 13, 2024 at 03:42:48PM +0100, Alice Ryhl wrote: > Could you print an error if the --- is missing, that is, if the number > of sections is incorrect? I don't think that's the right way to go, either, because the number of "---" sections can vary (including having none at all). Throwing an error when that happens would just annoy a different set of people. I'll think of something. -K
Hi Alice, Applied on top of v6.13-rc2 and tried to build: error[E0277]: the trait bound `ARef<Task>: From<&CurrentTask>` is not satisfied --> rust/doctests_kernel_generated.rs:6884:22 | 6884 | creator: current!().into(), | ^^^^^^^^^^ ---- required by a bound introduced by this call | | | the trait `From<&CurrentTask>` is not implemented for `ARef<Task>`, which is required by `&CurrentTask: Into<_>` | this tail expression is of type `&CurrentTask` | = help: the trait `From<&Task>` is implemented for `ARef<Task>` = help: for that trait implementation, expected `Task`, found `CurrentTask` = note: required for `&CurrentTask` to implement `Into<ARef<Task>>` error: aborting due to 1 previous error Best regards, Andreas Hindborg
On 12/16/24 12:04 PM, Andreas Hindborg wrote: > Hi Alice, > > Applied on top of v6.13-rc2 and tried to build: > > error[E0277]: the trait bound `ARef<Task>: From<&CurrentTask>` is not satisfied > --> rust/doctests_kernel_generated.rs:6884:22 > | > 6884 | creator: current!().into(), > | ^^^^^^^^^^ ---- required by a bound introduced by this call > | | > | the trait `From<&CurrentTask>` is not implemented for `ARef<Task>`, which is required by `&CurrentTask: Into<_>` > | this tail expression is of type `&CurrentTask` > | > = help: the trait `From<&Task>` is implemented for `ARef<Task>` > = help: for that trait implementation, expected `Task`, found `CurrentTask` > = note: required for `&CurrentTask` to implement `Into<ARef<Task>>` > > error: aborting due to 1 previous error Ah, thanks. Looks like a documentation test that needs to be adjusted. Alice
© 2016 - 2024 Red Hat, Inc.