Thread (71 messages) flat view 71 messages, 6 authors, 7h ago

Re: [PATCH v10 11/41] KVM: guest_memfd: Ensure pages are not in use before conversion

From: "David Hildenbrand (Arm)" <david@kernel.org>
Date: 2026-08-11 17:57:16
Also in: kvm, linux-coco, linux-doc, linux-kselftest, linux-mm, lkml

helps the reader understand what's being checked without having to look at the
details, and also helps communicate the ordering dependency without needing a
comment.

There are definitely times where the usage of a function bleeds into its name,
but usually that's because the name and the usage are on and the same.  E.g.
get_user() describes both the usage and the "what".  And it's easy/possible to
go too far in the opposite direction, e.g. by giving a play-by-play of what a
function is doing, but that's why we have bikshedding sessions :-)
Note that the problem I have with kvm_gmem_is_safe_for_conversion() that it is
all about *conversion to private*, not *conversion to shared*. In that sense,
the function name is just confusing.
quoted
Perhaps a little ahead of its time,
Ya.
quoted
but later with restructuring for huge pages, we also need no additional
refcounts other than gmem's own so that restructuring is safe, hence this
function name was meant to extend there as well.
Given that I've read that at least five times and still don't understand the
nuance, I think it's safe (ha!) to say we'll need to revisit and review those
changes no matter what. :-)

 
quoted
In this case "unexpected" (especially since the next patch adds checks
for maybe dma pinned and unmapping), begs the question "unexpected in
what way"?
Ya, that's why I like "outstanding", it succinctly captures that one or more
references have been "loaned" but not yet "repaid".
quoted
quoted
I'd rather add a comment than have this filemap_get_folios_refcount.
+1, the local variable just made me scratch my head.
quoted
quoted
/*
 * We expect one reference per folio-page in the pagecache and one
 * reference from filemap_get_folios().
Nit, please no pronouns in KVM code.
Whatever floats KVM's boat :)
quoted
quoted
 */
if (folio_ref_count(folio) != folio_nr_pages(folio) + 1)
This comment explains what's "unexpected". I can do this and switch it
to kvm_gmem_mem_has_unexpected_refs() unless people have other
suggestions.

I wish there was a folio_pagecache_refs(folio) that
folio_expected_ref_count() can share with this, and also
folio_swapcache_refs(), to solidify the definition of refcounts taken by
the pagecache.
...
quoted
quoted
I'd add a comment here for the "why are we unmapping".
Does this sound right:

Unmap here to ensure that userspace page tables have no mappings, which
also ensures refcounts from those mappings are dropped.
How about:

		/*
		 * Forcefully unmap the pages from all userspace page tables,
		 * and then verify there are no outstanding references, e.g.
		 * acquired via GUP or similar.  Tell userspace to try again if
		 * there are oustanding references and hope that whatever has
		 * pinned the page will put its reference "soon".
		 */
		unmap_mapping_pages(mapping, start, nr_pages, false);

                if (!kvm_gmem_is_safe_for_conversion(inode, start, nr_pages,
                                                     err_index)) {
                        mas_destroy(&mas);
                        r = -EAGAIN;
                        goto out;
                }

Sounds good besides the function still not being clear about *which* kind of
conversion.


-- 
Cheers,

David
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help