Messages in this thread | | | Subject | Re: [PATCH 1/2] KVM: MMU: Do not treat ZONE_DEVICE pages as being reserved | From | Paolo Bonzini <> | Date | Thu, 7 Nov 2019 12:12:03 +0100 |
| |
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
| |