Thread (85 messages) flat view 85 messages, 8 authors, 15d ago

Re: [PATCH v12 13/45] KVM: guest_memfd: Pass mapping type filter to invalidation helper

From: Fuad Tabba <fuad.tabba@linux.dev>
Date: 2026-09-01 10:34:53
Also in: kvm, linux-coco, linux-doc, linux-kselftest, linux-mm, lkml

On Mon, 31 Aug 2026 at 01:25, Ackerley Tng via B4 Relay
[off-list ref] wrote:
From: Ackerley Tng <redacted>

Accept the mapping type filter as a parameter in the invalidation start
helper instead of querying it internally. This allows callers to specify
which mappings (shared, private, or both) should be invalidated.

In the next patch, the conversion process will use this new parameter to
invalidate mappings only when they're different from the target state of
the conversion, i.e. invalidate only shared mappings on a shared to private
conversion and not both.

No functional change intended.

Signed-off-by: Ackerley Tng <redacted>
Reviewed-by: Fuad Tabba <fuad.tabba@linux.dev>

Cheers,
/fuad

quoted hunk ↗ jump to hunk
---
 virt/kvm/guest_memfd.c | 14 +++++++++-----
 1 file changed, 9 insertions(+), 5 deletions(-)
diff --git a/virt/kvm/guest_memfd.c b/virt/kvm/guest_memfd.c
index e41802944756b..e19de803149c2 100644
--- a/virt/kvm/guest_memfd.c
+++ b/virt/kvm/guest_memfd.c
@@ -192,13 +192,13 @@ static void __kvm_gmem_invalidate_start(struct gmem_file *f, pgoff_t start,
 }

 static void kvm_gmem_invalidate_start(struct inode *inode, pgoff_t start,
-                                     pgoff_t end)
+                                     pgoff_t end,
+                                     enum kvm_gfn_range_filter filter)
 {
-       enum kvm_gfn_range_filter attr_filter = kvm_gmem_get_all_gfns_filter(inode);
        struct gmem_file *f;

        kvm_gmem_for_each_file(f, inode)
-               __kvm_gmem_invalidate_start(f, start, end, attr_filter);
+               __kvm_gmem_invalidate_start(f, start, end, filter);
 }

 static void __kvm_gmem_invalidate_end(struct gmem_file *f, pgoff_t start,
@@ -224,6 +224,7 @@ static void kvm_gmem_invalidate_end(struct inode *inode, pgoff_t start,

 static long kvm_gmem_punch_hole(struct inode *inode, loff_t offset, loff_t len)
 {
+       enum kvm_gfn_range_filter filter = kvm_gmem_get_all_gfns_filter(inode);
        pgoff_t start = offset >> PAGE_SHIFT;
        pgoff_t end = (offset + len) >> PAGE_SHIFT;
@@ -233,7 +234,7 @@ static long kvm_gmem_punch_hole(struct inode *inode, loff_t offset, loff_t len)
         */
        filemap_invalidate_lock(inode->i_mapping);

-       kvm_gmem_invalidate_start(inode, start, end);
+       kvm_gmem_invalidate_start(inode, start, end, filter);

        truncate_inode_pages_range(inode->i_mapping, offset, offset + len - 1);
@@ -522,6 +523,8 @@ static int kvm_gmem_migrate_folio(struct address_space *mapping,

 static int kvm_gmem_error_folio(struct address_space *mapping, struct folio *folio)
 {
+       struct inode *inode = mapping->host;
+       enum kvm_gfn_range_filter filter;
        pgoff_t start, end;

        filemap_invalidate_lock_shared(mapping);
@@ -529,7 +532,8 @@ static int kvm_gmem_error_folio(struct address_space *mapping, struct folio *fol
        start = folio->index;
        end = start + folio_nr_pages(folio);

-       kvm_gmem_invalidate_start(mapping->host, start, end);
+       filter = kvm_gmem_get_all_gfns_filter(inode);
+       kvm_gmem_invalidate_start(inode, start, end, filter);

        /*
         * Do not truncate the range, what action is taken in response to the

--
2.55.0.897.gb25b4bd76c-goog
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help