On Mon, Sep 08, 2025 at 01:35:27PM +0300, Mike Rapoport wrote:
> +static struct kho_vmalloc_chunk *new_vmalloc_chunk(struct kho_vmalloc_chunk 
> *cur)
> +{
> +     struct kho_vmalloc_chunk *chunk;
> +     int err;
> +
> +     chunk = kzalloc(PAGE_SIZE, GFP_KERNEL);
> +     if (!chunk)
> +             return NULL;
> +
> +     err = kho_preserve_phys(virt_to_phys(chunk), PAGE_SIZE);
> +     if (err)
> +             goto err_free;

kzalloc() cannot be preserved, the only thing we support today is
alloc_page(), so this code pattern shouldn't exist.

Call alloc_page() and use a kho_preserve_page/folio() like the luo
patches were doing. The pattern seems common it probably needs a small
alloc/free helper.

> +     for (int i = 0; i < vm->nr_pages; i += (1 << order)) {
> +             phys_addr_t phys = page_to_phys(vm->pages[i]);
> +
> +             err = __kho_preserve_order(track, PHYS_PFN(phys), order);
> +             if (err)
> +                     goto err_free;

I think you should make a helper inline to document what is happening here:

/*
 * Preserve a contiguous aligned list of order 0 pages that aggregate
 * to a higher order allocation. Must be restored using
 * kho_restore_page() on each order 0 page.
 */
kho_preserve_pages(page, order);

Jason

Reply via email to