Ackerley Tng wrote: [snip] > Signed-off-by: Ackerley Tng <ackerleytng@xxxxxxxxxx> > [snip] > diff --git a/virt/kvm/guest_memfd.c b/virt/kvm/guest_memfd.c > index 590932499eba..f802116290ce 100644 > --- a/virt/kvm/guest_memfd.c > +++ b/virt/kvm/guest_memfd.c > @@ -30,6 +30,10 @@ enum shareability { > }; > > static struct folio *kvm_gmem_get_folio(struct inode *inode, pgoff_t index); > +static void kvm_gmem_invalidate_begin(struct kvm_gmem *gmem, pgoff_t start, > + pgoff_t end); > +static void kvm_gmem_invalidate_end(struct kvm_gmem *gmem, pgoff_t start, > + pgoff_t end); > > static struct kvm_gmem_inode_private *kvm_gmem_private(struct inode *inode) > { > @@ -85,6 +89,306 @@ static struct folio *kvm_gmem_get_shared_folio(struct inode *inode, pgoff_t inde > return kvm_gmem_get_folio(inode, index); > } > > +/** > + * kvm_gmem_shareability_store() - Sets shareability to @value for range. > + * > + * @mt: the shareability maple tree. > + * @index: the range begins at this index in the inode. > + * @nr_pages: number of PAGE_SIZE pages in this range. > + * @value: the shareability value to set for this range. > + * > + * Unlike mtree_store_range(), this function also merges adjacent ranges that > + * have the same values as an optimization. Is this an optimization or something which will be required to convert from shared back to private and back to a huge page mapping? If this is purely an optimization it might be best to leave it out for now to get functionality first. I have more to review but wanted to ask this. Ira [snip]