Re: [PATCH v3 07/30] kho: add interfaces to unpreserve folios and physical memory ranges
From: Mike Rapoport <rppt@kernel.org>
Date: 2025-08-15 09:12:34
Also in:
linux-doc, linux-fsdevel, linux-mm, lkml
On Thu, Aug 14, 2025 at 10:22:33AM -0300, Jason Gunthorpe wrote:
On Thu, Aug 07, 2025 at 01:44:13AM +0000, Pasha Tatashin wrote:quoted
+int kho_unpreserve_phys(phys_addr_t phys, size_t size) +{Why are we adding phys apis? Didn't we talk about this before and agree not to expose these? The places using it are goofy: +static int luo_fdt_setup(void) +{ + fdt_out = (void *)__get_free_pages(GFP_KERNEL | __GFP_ZERO, + get_order(LUO_FDT_SIZE)); + ret = kho_preserve_phys(__pa(fdt_out), LUO_FDT_SIZE); + WARN_ON_ONCE(kho_unpreserve_phys(__pa(fdt_out), LUO_FDT_SIZE)); It literally allocated a page and then for some reason switches to phys with an open coded __pa?? This is ugly, if you want a helper to match __get_free_pages() then make one that works on void * directly. You can get the order of the void * directly from the struct page IIRC when using GFP_COMP. Which is perhaps another comment, if this __get_free_pages() is going to be a common pattern (and I guess it will be) then the API should be streamlined alot more: void *kho_alloc_preserved_memory(gfp, size); void kho_free_preserved_memory(void *);
This looks backwards to me. KHO should not deal with memory allocation, it's responsibility to preserve/restore memory objects it supports. For __get_free_pages() the natural KHO API is kho_(un)preserve_pages(). With struct page/mesdesc we always have page_to_<specialized object> from one side and page_to_pfn from the other side. Then folio and phys/virt APIS just become a thin wrappers around the _page APIs. And down the road we can add slab and maybe vmalloc. Once folio won't overlap struct page, we'll have a hard time with only kho_preserve_folio() for memory that's not actually folio (i.e. anon and page cache)
Which can wrapper the get_free_pages and the preserve logic and gives a nice path to possibly someday supporting non-PAGE_SIZE allocations. Jason
-- Sincerely yours, Mike.