Re: [RFC PATCH v2 2/2] kho: Introduce preserve/restore APIs for unsplit pages

Pranjal Shrivastava <[email protected]> Wed, 22 Jul 2026 21:19:53 +0000
Newsgroups org.infradead.lists.kexec,org.kernel.vger.linux-kernel,org.kvack.linux-mm
Message-ID <[email protected]>
On Mon, Jul 20, 2026 at 07:57:15PM +0300, Mike Rapoport wrote:
> > The current KHO page preservation APIs (e.g. kho_preserve_pages) assume
> > that multi-page blocks are split into independent 4KB pages during
> > restoration. This is incompatible with high-order non-compound pages,
> > such as DMA buffers, which must be restored with tail pages having a
> > zero reference count.
> > 
> > Introduce explicit preserve and restore APIs for unsplit pages,
> 
>                                  high-order non-compound ^
> 

Ack, will update the commit msg.

> > which preserve and restore a high-order page block as a single unit,
> > applying a refcount of 1 to the head page while leaving tail pages at 0.
> > Rename the existing internal helper to __kho_restore_page().
> > 
> > Signed-off-by: Pranjal Shrivastava <[email protected]>
> >
> > diff --git a/include/linux/kexec_handover.h b/include/linux/kexec_handover.h
> > index 8968c56d2d73e..6e2c75b16209c 100644
> > --- a/include/linux/kexec_handover.h
> > +++ b/include/linux/kexec_handover.h
> > @@ -22,6 +22,8 @@ bool is_kho_boot(void);
> >  

[...]

> > +struct page *kho_restore_page(phys_addr_t phys)
> > +{
> > +	struct page *page = pfn_to_online_page(PHYS_PFN(phys));
> > +	unsigned long nr_pages;
> > +	union kho_page_info info;
> > +
> > +	if (!page)
> > +		return NULL;
> > +
> > +	info.page_private = page->private;
> > +	if (WARN_ON_ONCE(info.magic != KHO_PAGE_MAGIC))
> > +		return NULL;
> > +
> > +	nr_pages = (1UL << info.order);
> > +	page->private = 0;
> > +
> > +	kho_init_unsplit_pages(page, info.order);
> > +	adjust_managed_page_count(page, nr_pages);
> > +
> > +	return page;
> 
> Hmm, it copies a lot from __kho_init_page().
> We should keep the common part of order-0 page/folio/high-order page
> initialization in a single place.
> 

Alright, I'll break out a helper.

Thanks,
Praan