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 16:32:13 +0100 [thread overview]
Message-ID: <871pxcgg02.fsf@kernel.org> (raw)
In-Reply-To: <8b803030-0ca3-4591-b2f3-bb9bcc2aca21@lucifer.local> (Lorenzo Stoakes's message of "Thu, 09 Jan 2025 11:29:43 +0000")
"Lorenzo Stoakes" <lorenzo.stoakes@oracle.com> writes:
> On Thu, Jan 09, 2025 at 10:50:13AM +0100, Andreas Hindborg wrote:
>> "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?
>
> Because these are page tables and page tables can span multiple PTE
> tables. Correctly removing at the time of clearing would be expensive and
> require very careful handling.
What is the distinction between clearing a PTE and removing it?
I asked above if the leaf page holding the PTEs would be dropped if all
the PTEs it holds are cleared. Alice "If the vma owns a refcount on those pages,
then the refcounts are dropped.". But from your message I am guessing
maybe not?
>
>>
>> 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?
>
> No, because we're dealing with page tables and you are explicitly requesting a
> page table operation. Knowing what is touched is meaningful.
When would a page table operation to remove (clear?) the PTEs
corresponding to an address range touch PTEs corresponding to addresses
outside of the range?
>
>>
>> > 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.
>
> It is highly pertinent as mentioned above.
>
> I mean we can expand the comment to explicitly add some detail around this
> since obviously this is confusing (hey - a lot of mm is confusing - this is
> an ongonig problem and why I have gone to lengths to try to improve
> documentation and wrote a book about it :)
That would be nice :)
>
>>
>> >
>> > 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?
>
> I object to the suggestion in general. The description is fine as it is.
Ok. I'm raising a flag because I had more questions after reading the
docstring than before.
>
>>
>> >
>> >>
>> >> >
>> >> >> > 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.
>
> I think you're getting the wrong end of the stick - you are making comments
> on something relevant to mm, as an mm maintainer I'm giving you my point of
> view.
I appreciate that.
>
> Your comments elsewhere seem highly useful, and review is always
> appreciated, if you read what I said above - I defer entirely to the rust
> community on things of which you are expert - so there is clearly no
> disrespect intended.
I did not read any disrespect in your message. I understand if you think
I am late at the party at v11. Normally I would not pick up review of a
series that late.
>
> I'd also ask you to respect that I have gone to great lengths to review
> this series from mm side, motivated by a strong desire to help the rust
> commnuity.
I absolutely appreciate that!
>
> So where I am coming from is nothing negative, quite the opposite, I simply
> feel _on this issue_ it is not worth holding up the series for.
>
> This is no way intended to do down, disrespect or seem ungrateful for your
> review or efforts. Apologies if it seemed that way, was not the intent.
>
> And to reiterate what I said above - I want to see this series merge :) so
> there is no ill will anywhere.
We can always merge this as is and then discuss the finer points of
documentation later - I am fine with that. But obviously I cannot put my
review tag on it, when I don't understand the semantics of the functions
from reading the documentation strings. Perhaps we have someone who is
more well versed in mm that can.
>
>>
>>
>> Best regards,
>> Andreas Hindborg
>>
>
> Perhaps the correct approach here, as alluded above, is for Alice to add an
> extra commentary pointing out the role of page tables here?
That would be nice. Perhaps a bit of module level documentation is also
a good addition.
>
> To complicate matters further (of course) there are recent series which
> actually _do_ unused clean up page tables, though not (I believe... I have
> to check...) on zap. But of course we in mm JUST LOVE to complicate
> everything... ;)
We should make sure to document that :)
Best regards,
Andreas Hindborg
next prev parent reply other threads:[~2025-01-09 20:33 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
2025-01-09 11:29 ` Lorenzo Stoakes
2025-01-09 15:32 ` Andreas Hindborg [this message]
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=871pxcgg02.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