On Tue, Sep 15, 2020 at 09:39:47AM -0700, Ralph Campbell wrote:
I don't think any of the three ->page_free instances even cares aboutNot true. The page_free() callback records the page is free by setting
the page refcount.
a bit or putting the page on a free list but when it allocates a free
device private struct page to be used with migrate_vma_setup(), it needs to
increment the refcount.
For the ZONE_DEVICE MEMORY_DEVICE_GENERIC and MEMORY_DEVICE_PCI_P2PDMA
struct pages, I think you are correct because they don't define page_free()
and from what I can see, don't decrement the page refcount to zero.
Umm, the whole point of ZONE_DEVICE is to have a struct page for
something that is not system memory. For both the ppc kvm case (magic
hypervisor pool) and Noveau (device internal) memory that clear is the
case. But looks like test_hmm uses normal pages to fake this up, so
I was wrong about the third caller. But I think we can just call
set_page_count just before freeing the page there with a comment
explaining what is goin on.