Re: [PATCH v6 3/3] mm/gup: disallow FOLL_LONGTERM GUP-fast writing to file-backed mappings

From: David Hildenbrand
Date: Tue May 02 2023 - 12:33:21 EST


On 02.05.23 18:19, Jason Gunthorpe wrote:
On Tue, May 02, 2023 at 06:12:39PM +0200, David Hildenbrand wrote:

It missses the general architectural point why we have all these
shootdown mechanims in other places - plares are not supposed to make
these kinds of assumptions. When the userspace unplugs the memory from
KVM or unmaps it from VFIO it is not still being accessed by the
kernel.

Yes. Like having memory in a vfio iommu v1 and doing the same (mremap,
munmap, MADV_DONTNEED, ...). Which is why we disable MADV_DONTNEED (e.g.,
virtio-balloon) in QEMU with vfio.

That is different, VFIO has it's own contract how it consumes the
memory from the MM and VFIO breaks all this stuff.

But when you tell VFIO to unmap the memory it doesn't keep accessing
it in the background like this does.

To me, this is similar to when QEMU (user space) triggers KVM_S390_ZPCIOP_DEREG_AEN, to tell KVM to disable AIF and stop using the page (1) When triggered by the guest explicitly (2) when resetting the VM (3) when resetting the virtual PCI device / configuration.

Interrupt gets unregistered from HW (which stops using the page), the pages get unpinned. Pages get no longer used.

I guess I am still missing (a) how this is fundamentally different (b) how it could be done differently.

I'd really be happy to learn how a better approach would look like that does not use longterm pinnings.

I don't see an easy way to not use longterm pinnings. When using mmu notifiers and getting notified about unmapping of a page (for whatever reason ... migration, swapout, unmap), you'd have to disable aif. But when to reenable it (maybe there would be a way)? Also, I'm not sure if this could even be visible by the guest, if it's suddenly no longer enabled.

Something for the s390x people to explore ... if HW would be providing a way to deal with that somehow.

--
Thanks,

David / dhildenb