On Tue, Jul 15, 2025 at 3:56 PM Michael Roth <michael.roth@xxxxxxx> wrote: > > > diff --git a/virt/kvm/guest_memfd.c b/virt/kvm/guest_memfd.c > > > index b77cdccd340e..f27e1f3962bb 100644 > > > --- a/virt/kvm/guest_memfd.c > > > +++ b/virt/kvm/guest_memfd.c > > > @@ -203,6 +203,28 @@ static int kvm_gmem_shareability_apply(struct inode *inode, > > > struct maple_tree *mt; > > > > > > mt = &kvm_gmem_private(inode)->shareability; > > > + > > > + /* > > > + * If a folio has been allocated then it was possibly in a private > > > + * state prior to conversion. Ensure arch invalidations are issued > > > + * to return the folio to a normal/shared state as defined by the > > > + * architecture before tracking it as shared in gmem. > > > + */ > > > + if (m == SHAREABILITY_ALL) { > > > + pgoff_t idx; > > > + > > > + for (idx = work->start; idx < work->start + work->nr_pages; idx++) { > > > > It is redundant to enter this loop for VM variants that don't need > > this loop e.g. for pKVM/TDX. I think KVM can dictate a set of rules > > (based on VM type) that guest_memfd will follow for memory management > > when it's created, e.g. something like: > > 1) needs pfn invalidation > > 2) needs zeroing on shared faults > > 3) needs zeroing on allocation > > Makes sense. Maybe internal/reserved GUEST_MEMFD_FLAG_*'s that can be passed > to kvm_gmem_create()? Yeah, a set of internal flags in addition to what is passed by user space looks good to me. i.e. Something like: -int kvm_gmem_create(struct kvm *kvm, struct kvm_create_guest_memfd *args) +int kvm_gmem_create(struct kvm *kvm, struct kvm_create_guest_memfd *args, u64 kvm_flags) > > -Mike