On Tue, Sep 10, 2024 at 11:44:01PM +0000, Ackerley Tng wrote: > Since guest_memfd now supports mmap(), folios have to be prepared > before they are faulted into userspace. > > When memory attributes are switched between shared and private, the > up-to-date flags will be cleared. > > Use the folio's up-to-date flag to indicate being ready for the guest > usage and can be used to mark whether the folio is ready for shared OR > private use. Clearing the up-to-date flag also means that the page gets zero'd out whenever it transitions between shared and private (either direction). pKVM (Android) hypervisor policy can allow in-place conversion between shared/private. I believe the important thing is that sev_gmem_prepare() needs to be called prior to giving page to guest. In my series, I had made a ->prepare_inaccessible() callback where KVM would only do this part. When transitioning to inaccessible, only that callback would be made, besides the bookkeeping. The folio zeroing happens once when allocating the folio if the folio is initially accessible (faultable).