Re: [PATCH] mm: remove extra ZONE_DEVICE struct page refcount

From: Ralph Campbell
Date: Tue Sep 15 2020 - 13:27:50 EST



On 9/15/20 9:29 AM, Christoph Hellwig wrote:
On Mon, Sep 14, 2020 at 04:53:25PM -0700, Ralph Campbell wrote:
Since set_page_refcounted() is defined in mm_interal.h I would have to
move the definition to someplace like page_ref.h or have the drivers
cal init_page_count() or set_page_count() since get_page() calls
VM_BUG_ON_PAGE() if refcount == 0.
I'll move set_page_refcounted() since that is what the page allocator
uses and seems named for the purpose.

I don't think any of the three ->page_free instances even cares about
the page refcount.

Not true. The page_free() callback records the page is free by setting
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.