On Mon, 31 Aug 2026 at 01:25, Ackerley Tng via B4 Relay <[email protected]> wrote: > > From: Ackerley Tng <[email protected]> > > 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 <[email protected]>
Reviewed-by: Fuad Tabba <[email protected]> Cheers, /fuad > --- > 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 > >
