Re: [PATCH v4 1/7] mm/zone_device: Add order argument to folio_free callback
From: Zi Yan <ziy@nvidia.com>
Date: 2026-01-13 00:35:18
Also in:
amd-gfx, dri-devel, intel-xe, kvm, linux-cxl, linux-mm, linux-pci, lkml, nouveau
On 12 Jan 2026, at 18:53, Jason Gunthorpe wrote:
On Mon, Jan 12, 2026 at 06:34:06PM -0500, Zi Yan wrote:quoted
page[1].flags.f &= ~PAGE_FLAGS_SECOND. It clears folio->order. free_tail_page_prepare() clears ->mapping, which is TAIL_MAPPING, and compound_head at the end. page->flags.f &= ~PAGE_FLAGS_CHECK_AT_PREP. It clears PG_head for compound pages. These three parts undo prep_compound_page().Well, mm doesn't clear all things on alloc..quoted
In current nouveau code, ->free_folios is used holding the freed folio. In nouveau_dmem_page_alloc_locked(), the freed folio is passed to zone_device_folio_init(). If the allocated folio order is different from the freed folio order, I do not know how you are going to keep track of the rest of the freed folio. Of course you can implement a buddy allocator there.nouveau doesn't support high order folios. A simple linked list is not really a suitable data structure to ever support high order folios with.. If it were to use such a thing, and did want to take a high order folio off the list, and reduce its order, then it would have to put the remainder back on the list with a revised order value. That's all, nothing hard. Again if the driver needs to store information in the struct page to manage its free list mechanism (ie linked pointers, order, whatever) then it should be doing that directly. When it takes the memory range off the free list it should call zone_device_page_init() to make it ready to be used again. I think it is a poor argument to say that zone_device_page_init() should rely on values already in the struct page to work properly :\ The usable space within the struct page, and what values must be fixed for correct system function, should exactly mirror what frozen pages require. After free it is effectively now a frozen page owned by the device driver. I haven't seen any documentation on that, but I suspect Matthew and David have some ideas.. If there is a reason for order, flags and mapping to be something particular then it should flow from the definition of frozen pages, and be documented, IMHO.
Thank you for the explanation. It seems that I do not have enough knowledge to comment on device private pages. I will refrain myself from doing so from now on Best Regards, Yan, Zi