On Sat, Nov 01, 2025 at 10:23:20AM -0400, Pasha Tatashin wrote:
If there is an error half way through KHO memory preservation, we should rollback and unpreserve everything that is partially preserved.
Signed-off-by: Pasha Tatashin pasha.tatashin@soleen.com Suggested-by: Pratyush Yadav pratyush@kernel.org
Reviewed-by: Mike Rapoport (Microsoft) rppt@kernel.org
with a small nit below.
mm/memblock.c | 73 ++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 58 insertions(+), 15 deletions(-)
diff --git a/mm/memblock.c b/mm/memblock.c index e3bef9b35d63..f527ad1ca682 100644 --- a/mm/memblock.c +++ b/mm/memblock.c @@ -2445,29 +2445,60 @@ int reserve_mem_release_by_name(const char *name)
...
static int __init prepare_kho_fdt(void) {
- int err = 0, i; struct page *fdt_page; void *fdt;
- int err;
fdt_page = alloc_page(GFP_KERNEL);
- if (!fdt_page)
return -ENOMEM;
- if (!fdt_page) {
err = -ENOMEM;goto err_no_fdt_page;
Please rename the label to describe what the goto does, say, err_report. I believe it can be a fixup on top after Andrew merges these.
...
+err_remove_subtree:
- kho_remove_subtree(fdt);
+err_unpreserve_fdt:
- kho_unpreserve_pages(fdt_page, 1);
+err_free_fdt:
- put_page(fdt_page);
+err_no_fdt_page:
- pr_err("failed to prepare memblock FDT for KHO: %d\n", err);
return err; } -- 2.51.1.930.gacf6e81ea2-goog