[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20250908141423.GJ616306@nvidia.com>
Date: Mon, 8 Sep 2025 11:14:23 -0300
From: Jason Gunthorpe <jgg@...dia.com>
To: Mike Rapoport <rppt@...nel.org>
Cc: Andrew Morton <akpm@...ux-foundation.org>,
Alexander Graf <graf@...zon.com>, Baoquan He <bhe@...hat.com>,
Changyuan Lyu <changyuanl@...gle.com>, Chris Li <chrisl@...nel.org>,
Pasha Tatashin <pasha.tatashin@...een.com>,
Pratyush Yadav <pratyush@...nel.org>, kexec@...ts.infradead.org,
linux-mm@...ck.org, linux-kernel@...r.kernel.org
Subject: Re: [PATCH v3 1/2] kho: add support for preserving vmalloc
allocations
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
Powered by blists - more mailing lists