[PATCH v7 0/2] Rust support for mm_struct, vm_area_struct, and mmap for miscdevice

Alice Ryhl posted 2 patches 1 month, 1 week ago
rust/helpers/helpers.c    |   1 +
rust/helpers/mm.c         |  55 +++++++
rust/kernel/lib.rs        |   1 +
rust/kernel/miscdevice.rs |  24 ++++
rust/kernel/mm.rs         | 357 ++++++++++++++++++++++++++++++++++++++++++++++
rust/kernel/mm/virt.rs    | 264 ++++++++++++++++++++++++++++++++++
6 files changed, 702 insertions(+)
[PATCH v7 0/2] Rust support for mm_struct, vm_area_struct, and mmap for miscdevice
Posted by Alice Ryhl 1 month, 1 week ago
The first patch introduces mm_struct and vm_area_struct abstractions,
and the second patch uses them for miscdevice.

This updates the vm_area_struct support to use the approach we discussed
at LPC where there are three different types depending on the kind of
access you have to the vma. You either have read access, write access,
or you are initializing it. Each case allows a larger set of operations
on the vma.

The first patch in this series depends on vfs.rust.file for
NotThreadSafe. The second patch in this series depends on char-misc-next
for the base miscdevice implementation.

---
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 (2):
      rust: mm: add abstractions for mm_struct and vm_area_struct
      rust: miscdevice: add mmap support

 rust/helpers/helpers.c    |   1 +
 rust/helpers/mm.c         |  55 +++++++
 rust/kernel/lib.rs        |   1 +
 rust/kernel/miscdevice.rs |  24 ++++
 rust/kernel/mm.rs         | 357 ++++++++++++++++++++++++++++++++++++++++++++++
 rust/kernel/mm/virt.rs    | 264 ++++++++++++++++++++++++++++++++++
 6 files changed, 702 insertions(+)
---
base-commit: 2d424646119f28780f3963811025c05ea848b85f
change-id: 20240723-vma-f80119f9fb35

Best regards,
-- 
Alice Ryhl <aliceryhl@google.com>
Re: [PATCH v7 0/2] Rust support for mm_struct, vm_area_struct, and mmap for miscdevice
Posted by Lorenzo Stoakes 3 weeks, 6 days ago
On Mon, Oct 14, 2024 at 09:29:50AM +0000, Alice Ryhl wrote:
> The first patch introduces mm_struct and vm_area_struct abstractions,
> and the second patch uses them for miscdevice.
>
> This updates the vm_area_struct support to use the approach we discussed
> at LPC where there are three different types depending on the kind of
> access you have to the vma. You either have read access, write access,
> or you are initializing it. Each case allows a larger set of operations
> on the vma.
>
> The first patch in this series depends on vfs.rust.file for
> NotThreadSafe. The second patch in this series depends on char-misc-next
> for the base miscdevice implementation.
>

Hi Alice,

Just to be clear - I am very keen in seeing this land, and will take a look
a this from a VMA and locking perspective.

I've been tied up with other work which has delayed me, but am
simultaneously working on documenting VMA locking (with various tricky ins
and outs around 'implicit' rules) which directly feeds into ensuring the
rust abstraction correctly matches expectation on the locking side of
things.

So I'd ideally like to get this doc update done first before reviewing, to
ensure we have good clarity on locking, but I think perhaps a good way is
for me to try to do both in conjunction with one another (will cc- you on
docs series when I send it!)

In any case - I will absolutely give this my attention as soon as I am able
to.

Relatedly - we've encountered issues recently in relation to locking
subtleties so this is _highly_ pertinent and equally _highly_ motivating
for having compiler help on this + a programmatic representation in rust.

I know Willy is in full support of this effort too, we are all keen to see
things move forward.

Thank you for doing this! :)

Best, Lorenzo

> ---
> 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 (2):
>       rust: mm: add abstractions for mm_struct and vm_area_struct
>       rust: miscdevice: add mmap support
>
>  rust/helpers/helpers.c    |   1 +
>  rust/helpers/mm.c         |  55 +++++++
>  rust/kernel/lib.rs        |   1 +
>  rust/kernel/miscdevice.rs |  24 ++++
>  rust/kernel/mm.rs         | 357 ++++++++++++++++++++++++++++++++++++++++++++++
>  rust/kernel/mm/virt.rs    | 264 ++++++++++++++++++++++++++++++++++
>  6 files changed, 702 insertions(+)
> ---
> base-commit: 2d424646119f28780f3963811025c05ea848b85f
> change-id: 20240723-vma-f80119f9fb35
>
> Best regards,
> --
> Alice Ryhl <aliceryhl@google.com>
>
Re: [PATCH v7 0/2] Rust support for mm_struct, vm_area_struct, and mmap for miscdevice
Posted by Boqun Feng 3 weeks, 6 days ago
Hi Lorenzo,

On Wed, Oct 30, 2024 at 06:52:34PM +0000, Lorenzo Stoakes wrote:
> On Mon, Oct 14, 2024 at 09:29:50AM +0000, Alice Ryhl wrote:
> > The first patch introduces mm_struct and vm_area_struct abstractions,
> > and the second patch uses them for miscdevice.
> >
> > This updates the vm_area_struct support to use the approach we discussed
> > at LPC where there are three different types depending on the kind of
> > access you have to the vma. You either have read access, write access,
> > or you are initializing it. Each case allows a larger set of operations
> > on the vma.
> >
> > The first patch in this series depends on vfs.rust.file for
> > NotThreadSafe. The second patch in this series depends on char-misc-next
> > for the base miscdevice implementation.
> >
> 
> Hi Alice,
> 
> Just to be clear - I am very keen in seeing this land, and will take a look
> a this from a VMA and locking perspective.
> 

Thanks!

> I've been tied up with other work which has delayed me, but am
> simultaneously working on documenting VMA locking (with various tricky ins
> and outs around 'implicit' rules) which directly feeds into ensuring the
> rust abstraction correctly matches expectation on the locking side of
> things.
> 
> So I'd ideally like to get this doc update done first before reviewing, to
> ensure we have good clarity on locking, but I think perhaps a good way is
> for me to try to do both in conjunction with one another (will cc- you on
> docs series when I send it!)
> 

Please Cc me as well, thanks!

Regards,
Boqun

> In any case - I will absolutely give this my attention as soon as I am able
> to.
> 
> Relatedly - we've encountered issues recently in relation to locking
> subtleties so this is _highly_ pertinent and equally _highly_ motivating
> for having compiler help on this + a programmatic representation in rust.
> 
> I know Willy is in full support of this effort too, we are all keen to see
> things move forward.
> 
> Thank you for doing this! :)
> 
> Best, Lorenzo
> 
> > ---
> > 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 (2):
> >       rust: mm: add abstractions for mm_struct and vm_area_struct
> >       rust: miscdevice: add mmap support
> >
> >  rust/helpers/helpers.c    |   1 +
> >  rust/helpers/mm.c         |  55 +++++++
> >  rust/kernel/lib.rs        |   1 +
> >  rust/kernel/miscdevice.rs |  24 ++++
> >  rust/kernel/mm.rs         | 357 ++++++++++++++++++++++++++++++++++++++++++++++
> >  rust/kernel/mm/virt.rs    | 264 ++++++++++++++++++++++++++++++++++
> >  6 files changed, 702 insertions(+)
> > ---
> > base-commit: 2d424646119f28780f3963811025c05ea848b85f
> > change-id: 20240723-vma-f80119f9fb35
> >
> > Best regards,
> > --
> > Alice Ryhl <aliceryhl@google.com>
> >
Re: [PATCH v7 0/2] Rust support for mm_struct, vm_area_struct, and mmap for miscdevice
Posted by Alice Ryhl 1 month, 1 week ago
On Mon, Oct 14, 2024 at 11:30 AM Alice Ryhl <aliceryhl@google.com> wrote:
>
> The first patch introduces mm_struct and vm_area_struct abstractions,
> and the second patch uses them for miscdevice.
>
> This updates the vm_area_struct support to use the approach we discussed
> at LPC where there are three different types depending on the kind of
> access you have to the vma. You either have read access, write access,
> or you are initializing it. Each case allows a larger set of operations
> on the vma.
>
> The first patch in this series depends on vfs.rust.file for
> NotThreadSafe. The second patch in this series depends on char-misc-next
> for the base miscdevice implementation.

Adding Christian as FYI due to the vfs.rust.file dependency.

Alice