[PATCH v11 0/8] Rust support for mm_struct, vm_area_struct, and mmap

Alice Ryhl posted 8 patches 2 weeks, 2 days ago
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(-)
[PATCH v11 0/8] Rust support for mm_struct, vm_area_struct, and mmap
Posted by Alice Ryhl 2 weeks, 2 days ago
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>
Re: [PATCH v11 0/8] Rust support for mm_struct, vm_area_struct, and mmap
Posted by Alice Ryhl 2 weeks, 2 days ago
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
Re: [PATCH v11 0/8] Rust support for mm_struct, vm_area_struct, and mmap
Posted by Konstantin Ryabitsev 2 weeks, 1 day ago
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
Re: [PATCH v11 0/8] Rust support for mm_struct, vm_area_struct, and mmap
Posted by Alice Ryhl 2 weeks ago
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
Re: [PATCH v11 0/8] Rust support for mm_struct, vm_area_struct, and mmap
Posted by Konstantin Ryabitsev 2 weeks ago
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
Re: [PATCH v11 0/8] Rust support for mm_struct, vm_area_struct, and mmap
Posted by Andreas Hindborg 1 week, 4 days ago
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
Re: [PATCH v11 0/8] Rust support for mm_struct, vm_area_struct, and mmap
Posted by Alice Ryhl 1 week, 4 days ago
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