On Thu, Apr 03, 2025 at 04:58:27PM +0300, Mike Rapoport wrote: > On Thu, Apr 03, 2025 at 08:42:09AM -0300, Jason Gunthorpe wrote: > > On Wed, Apr 02, 2025 at 07:16:27PM +0000, Pratyush Yadav wrote: > > > > +int kho_preserve_phys(phys_addr_t phys, size_t size) > > > > +{ > > > > + unsigned long pfn = PHYS_PFN(phys), end_pfn = PHYS_PFN(phys + size); > > > > + unsigned int order = ilog2(end_pfn - pfn); > > > > > > This caught my eye when playing around with the code. It does not put > > > any limit on the order, so it can exceed NR_PAGE_ORDERS. Also, when > > > initializing the page after KHO, we pass the order directly to > > > prep_compound_page() without sanity checking it. The next kernel might > > > not support all the orders the current one supports. Perhaps something > > > to fix? > > > > IMHO we should delete the phys functions until we get a user of them > > The only user of memory tracker in this series uses kho_preserve_phys() But it really shouldn't. The reserved memory is a completely different mechanism than buddy allocator preservation. It doesn't even call kho_restore_phys() those pages, it just feeds the ranges directly to: + reserved_mem_add(*p_start, size, name); The bitmaps should be understood as preserving memory from the buddy allocator only. IMHO it should not call kho_preserve_phys() at all. Jason