Hi Jason, > > On Mon, Jul 24, 2023 at 07:54:38AM +0000, Kasireddy, Vivek wrote: > > > > I'm not at all familiar with the udmabuf use case but that sounds > > > brittle and effectively makes this notifier udmabuf specific right? > > Oh, Qemu uses the udmabuf driver to provide Host Graphics components > > (such as Spice, Gstreamer, UI, etc) zero-copy access to Guest created > > buffers. In other words, from a core mm standpoint, udmabuf just > > collects a bunch of pages (associated with buffers) scattered inside > > the memfd (Guest ram backed by shmem or hugetlbfs) and wraps > > them in a dmabuf fd. And, since we provide zero-copy access, we > > use DMA fences to ensure that the components on the Host and > > Guest do not access the buffer simultaneously. > > So why do you need to track updates proactively like this? As David noted in the earlier series, if Qemu punches a hole in its memfd that goes through pages that are registered against a udmabuf fd, then udmabuf needs to update its list with new pages when the hole gets filled after (guest) writes. Otherwise, we'd run into the coherency problem (between udmabuf and memfd) as demonstrated in the selftest (patch #3 in this series). > > Trigger a move when the backing memory changes and re-acquire it with AFAICS, without this patch or adding new change_pte calls, there is no way to get notified when a new page is mapped into the backing memory of a memfd (backed by shmem or hugetlbfs) which happens after a hole punch followed by writes. We can definitely get notified when a hole is punched via the invalidate notifiers though, but as I described earlier this is not very helpful for the udmabuf use-case. > hmm_range_fault like everything else does. > > > And replace mmu_notifier_update_mapping(vma->vm_mm, address, > pte_pfn(*ptep)) > > in the current patch with > > mmu_notifier_change_pte(vma->vm_mm, address, ptep, false)); > > It isn't very useful because nothing can do anything meaningful under > the PTLs. Can't allocate memory for instance. Which makes me wonder > what it is udmabuf plans to actually do here. It is useful for udmabuf because it helps ensure coherency with the memfd. If you look at patch #2 in this series particularly the notifier callback (update_udmabuf), it just updates its list of pages and does not allocate any memory or do anything that would cause it to go to sleep other than taking a mutex which I plan to drop in v2 as it is not really needed. With that removed, I think it seems ok to call the notifier callback under the PTL. Thanks, Vivek > > JAson