From: Andreas Hindborg <a.hindborg@kernel.org>
To: "Lorenzo Stoakes" <lorenzo.stoakes@oracle.com>
Cc: "Alice Ryhl" <aliceryhl@google.com>,
"Miguel Ojeda" <ojeda@kernel.org>,
"Matthew Wilcox" <willy@infradead.org>,
"Vlastimil Babka" <vbabka@suse.cz>,
"John Hubbard" <jhubbard@nvidia.com>,
"Liam R. Howlett" <Liam.Howlett@oracle.com>,
"Andrew Morton" <akpm@linux-foundation.org>,
"Greg Kroah-Hartman" <gregkh@linuxfoundation.org>,
"Arnd Bergmann" <arnd@arndb.de>,
"Christian Brauner" <brauner@kernel.org>,
"Jann Horn" <jannh@google.com>,
"Suren Baghdasaryan" <surenb@google.com>,
"Alex Gaynor" <alex.gaynor@gmail.com>,
"Boqun Feng" <boqun.feng@gmail.com>,
"Gary Guo" <gary@garyguo.net>,
"Björn Roy Baron" <bjorn3_gh@protonmail.com>,
"Benno Lossin" <benno.lossin@proton.me>,
"Trevor Gross" <tmgross@umich.edu>,
linux-kernel@vger.kernel.org, linux-mm@kvack.org,
rust-for-linux@vger.kernel.org
Subject: Re: [PATCH v11 2/8] mm: rust: add vm_area_struct methods that require read access
Date: Thu, 09 Jan 2025 10:50:13 +0100 [thread overview]
Message-ID: <87msg09uzu.fsf@kernel.org> (raw)
In-Reply-To: <18bc911a-ede5-410b-9955-5382bcef975c@lucifer.local> (Lorenzo Stoakes's message of "Thu, 09 Jan 2025 08:19:53 +0000")
"Lorenzo Stoakes" <lorenzo.stoakes@oracle.com> writes:
> On Thu, Jan 09, 2025 at 09:02:11AM +0100, Andreas Hindborg wrote:
>> "Alice Ryhl" <aliceryhl@google.com> writes:
>>
>> > On Mon, Dec 16, 2024 at 3:51 PM Andreas Hindborg <a.hindborg@kernel.org> wrote:
>> >>
>> >>
>> >> > +
>> >> > + /// Zap pages in the given page range.
>> >> > + ///
>> >> > + /// This clears page table mappings for the range at the leaf level, leaving all other page
>> >> > + /// tables intact,
>> >>
>> >> I don't fully understand this docstring. Is it correct that the function
>> >> will unmap the address range given by `start` and `size`, _and_ free the
>> >> pages used to hold the mappings at the leaf level of the page table?
>> >
>> > If the vma owns a refcount on those pages, then the refcounts are dropped.
>>
>> Maybe drop the "at the leaf level leaving all other page tables intact".
>> It confuses me, since when would this not be the case?
>
> I don't understand your objection. The whole nature of a zap is to traverse
> leaf level page table mappings, clearing the entries, leaving the other
> page table entries intact.
As someone not deeply familiar with this function and it's use, I became
uncertain of my understanding when I read this sentence. As I asked
above: When would you not clear mappings at the leaf level and leave all
other mappings alone?
Imagine you have a collection structure backed by a tree and the
`remove_item` function has the sentence "remove item at the leaf level
but leave all other items in the collection alone". That would be over
specifying. It is enough information in the user facing documentation
that the item is removed. You don't need to state that a remove
operation on an item does not remove other items. Does this example
transfer to this function, or am I missing something?
> That is, precisely what is written here. In fact I think this
> characterisation is derived from discussions had with us in mm, and it is
> one with which I am happy.
>
> Why is it problematic to accurately describe what this does?
Again, it might be that I don't properly understand what the function
actually does, but if it is just removing the entries described by the
range - write that. Don't add irrelevant details or specify what the
function does not do. It slows down the user when reading documentation.
>
> For a series at v11 where there is broad agreement with maintainers within
> the subsystem which it wraps, perhaps the priority should be to try to have
> the series merged unless there is significant technical objection from the
> rust side?
>
>>
>> How about this:
>>
>> This clears the virtual memory map for the range given by `start` and
>> `size`, dropping refcounts to memory held by the mappings in this range. That
>> is, anonymous memory is completely freed, file-backed memory has its
>> reference count on page cache folio's dropped, any dirty data will still
>> be written back to disk as usual.
>
> Sorry I object to this, 'clears the virtual memory map' is really
> vague. What is already there is better.
Would you like the proposed paragraph if we replaced "virtual memory
map" with "page table mappings", or do you object to the entirety of the
new suggestion?
>
>>
>> >
>> >> > and freeing any memory referenced by the VMA in this range. That is,
>> >> > + /// anonymous memory is completely freed, file-backed memory has its reference count on page
>> >> > + /// cache folio's dropped, any dirty data will still be written back to disk as usual.
>> >> > + #[inline]
>> >> > + pub fn zap_page_range_single(&self, address: usize, size: usize) {
>>
>>
>> Best regards,
>> Andreas Hindborg
>>
>>
>
> Let's please get this series merged. I think Alice has demonstrated
> remarkable patience already, and modulo significant technical pushback on
> the rust side (on which I defer entirely to the expertise of rust people),
> I want to see this go in.
I am sensing that you don't feel my comments are relevant at the current
stage of this series (v11). Alice asked for reviews of the series. These are my
comments. Feel free do whatever you want with them.
Best regards,
Andreas Hindborg
next prev parent reply other threads:[~2025-01-09 9:50 UTC|newest]
Thread overview: 65+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <nGnC07PmUqofHiX7HfZAOCIK1-CPS7DF8kdGhDgJgPts5KYrCrimmovP-4YMVgI7WRmFnGwbdndTtxCfp278cg==@protonmail.internalid>
2024-12-11 10:37 ` [PATCH v11 0/8] Rust support for mm_struct, vm_area_struct, and mmap Alice Ryhl
2024-12-11 10:37 ` [PATCH v11 1/8] mm: rust: add abstraction for struct mm_struct Alice Ryhl
2024-12-16 11:31 ` Andreas Hindborg
2025-01-13 9:53 ` Alice Ryhl
2025-01-14 15:48 ` Lorenzo Stoakes
2025-01-15 1:54 ` John Hubbard
2025-01-15 12:13 ` Lorenzo Stoakes
2025-01-15 10:36 ` Andreas Hindborg
2025-01-15 20:20 ` John Hubbard
2025-01-17 0:45 ` Balbir Singh
2025-01-17 12:47 ` Alice Ryhl
2024-12-11 10:37 ` [PATCH v11 2/8] mm: rust: add vm_area_struct methods that require read access Alice Ryhl
2024-12-16 12:12 ` Andreas Hindborg
2025-01-08 12:21 ` Alice Ryhl
2025-01-09 8:02 ` Andreas Hindborg
2025-01-09 8:19 ` Lorenzo Stoakes
2025-01-09 9:50 ` Andreas Hindborg [this message]
2025-01-09 11:29 ` Lorenzo Stoakes
2025-01-09 15:32 ` Andreas Hindborg
2025-01-13 14:45 ` Lorenzo Stoakes
2025-01-14 9:50 ` Alice Ryhl
2025-01-14 11:57 ` Lorenzo Stoakes
2025-01-14 13:42 ` Alice Ryhl
2025-01-14 15:33 ` Lorenzo Stoakes
2025-01-15 11:02 ` Andreas Hindborg
2025-01-15 11:04 ` Alice Ryhl
2024-12-11 10:37 ` [PATCH v11 3/8] mm: rust: add vm_insert_page Alice Ryhl
2024-12-16 12:25 ` Andreas Hindborg
2025-01-13 10:02 ` Alice Ryhl
2025-01-15 9:33 ` Andreas Hindborg
2024-12-11 10:37 ` [PATCH v11 4/8] mm: rust: add lock_vma_under_rcu Alice Ryhl
2024-12-16 12:47 ` Andreas Hindborg
2025-01-13 10:04 ` Alice Ryhl
2025-01-15 9:34 ` Andreas Hindborg
2024-12-11 10:37 ` [PATCH v11 5/8] mm: rust: add mmput_async support Alice Ryhl
2024-12-16 13:10 ` Andreas Hindborg
2024-12-11 10:37 ` [PATCH v11 6/8] mm: rust: add VmAreaNew for f_ops->mmap() Alice Ryhl
2024-12-16 13:41 ` Andreas Hindborg
2025-01-08 12:23 ` Alice Ryhl
2025-01-09 8:19 ` Andreas Hindborg
2025-01-13 10:17 ` Alice Ryhl
2025-01-15 9:57 ` Andreas Hindborg
2024-12-17 9:31 ` Andreas Hindborg
2025-01-08 12:24 ` Alice Ryhl
2025-01-09 8:23 ` Andreas Hindborg
2025-01-13 10:18 ` Alice Ryhl
2025-01-10 13:34 ` Alice Ryhl
2025-01-10 16:09 ` Lorenzo Stoakes
2024-12-11 10:37 ` [PATCH v11 7/8] rust: miscdevice: add mmap support Alice Ryhl
2024-12-16 13:53 ` Andreas Hindborg
2024-12-11 10:37 ` [PATCH v11 8/8] task: rust: rework how current is accessed Alice Ryhl
2024-12-16 14:47 ` Andreas Hindborg
2025-01-08 12:32 ` Alice Ryhl
2025-01-09 8:42 ` Andreas Hindborg
2025-01-13 10:26 ` Alice Ryhl
2025-01-15 10:24 ` Andreas Hindborg
2024-12-16 23:40 ` Boqun Feng
2025-01-13 10:30 ` Alice Ryhl
2025-01-14 15:30 ` Boqun Feng
2024-12-11 10:47 ` [PATCH v11 0/8] Rust support for mm_struct, vm_area_struct, and mmap Alice Ryhl
2024-12-12 14:47 ` Konstantin Ryabitsev
2024-12-13 14:42 ` Alice Ryhl
2024-12-13 14:47 ` Konstantin Ryabitsev
2024-12-16 11:04 ` Andreas Hindborg
2024-12-16 11:46 ` Alice Ryhl
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87msg09uzu.fsf@kernel.org \
--to=a.hindborg@kernel.org \
--cc=Liam.Howlett@oracle.com \
--cc=akpm@linux-foundation.org \
--cc=alex.gaynor@gmail.com \
--cc=aliceryhl@google.com \
--cc=arnd@arndb.de \
--cc=benno.lossin@proton.me \
--cc=bjorn3_gh@protonmail.com \
--cc=boqun.feng@gmail.com \
--cc=brauner@kernel.org \
--cc=gary@garyguo.net \
--cc=gregkh@linuxfoundation.org \
--cc=jannh@google.com \
--cc=jhubbard@nvidia.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=lorenzo.stoakes@oracle.com \
--cc=ojeda@kernel.org \
--cc=rust-for-linux@vger.kernel.org \
--cc=surenb@google.com \
--cc=tmgross@umich.edu \
--cc=vbabka@suse.cz \
--cc=willy@infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox