On 07/11/19 06:48, Dan Williams wrote: >> How do mmu notifiers get held off by page references and does that >> machinery work with ZONE_DEVICE? Why is this not a concern for the >> VM_IO and VM_PFNMAP case? > Put another way, I see no protection against truncate/invalidate > afforded by a page pin. If you need guarantees that the page remains > valid in the VMA until KVM can install a mmu notifier that needs to > happen under the mmap_sem as far as I can see. Otherwise gup just > weakly asserts "this pinned page was valid in this vma at one point in > time". The MMU notifier is installed before gup, so any invalidation will be preceded by a call to the MMU notifier. In turn, invalidate_range_start/end is called with mmap_sem held so there should be no race. However, as Sean mentioned, early put_page of ZONE_DEVICE pages would be racy, because we need to keep the reference between the gup and the last time we use the corresponding struct page. Based on this, I think Sean's patches should work fine, and I prefer them over David's approach. Either way, adding some documentation is in order. Paolo