On Thu, Aug 14, 2025 at 1:22 PM Jason Gunthorpe <jgg@xxxxxxxxxx> wrote: > > On Thu, Aug 07, 2025 at 01:44:13AM +0000, Pasha Tatashin wrote: > > +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? It is already there, this patch simply completes a lacking unpreserve part. We can talk about removing it in the future, but the phys interface provides a benefit of not having to preserve power of two in length objects. > > 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. I will make this changes. > > 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 *); Hm, not all GFP flags are compatible with KHO preserve, but we could add this or similar API, but first let's make KHO completely stateless: remove, finalize and abort parts from it. > > 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