]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
kho: print which scratch buffer failed to be reserved
authorPratyush Yadav (Google) <pratyush@kernel.org>
Fri, 16 Jan 2026 16:54:11 +0000 (16:54 +0000)
committerAndrew Morton <akpm@linux-foundation.org>
Tue, 27 Jan 2026 03:07:15 +0000 (19:07 -0800)
When scratch area fails to reserve, KHO prints a message indicating that.
But it doesn't say which scratch failed to allocate.  This can be useful
information for debugging.  Even more so when the failure is hard to
reproduce.

Along with the current message, also print which exact scratch area failed
to be reserved.

Link: https://lkml.kernel.org/r/20260116165416.1262531-1-pratyush@kernel.org
Signed-off-by: Pratyush Yadav (Google) <pratyush@kernel.org>
Reviewed-by: Mike Rapoport (Microsoft) <rppt@kernel.org>
Cc: Alexander Graf <graf@amazon.com>
Cc: David Matlack <dmatlack@google.com>
Cc: Pasha Tatashin <pasha.tatashin@soleen.com>
Cc: Pratyush Yadav <pratyush@kernel.org>
Cc: Samiullah Khawaja <skhawaja@google.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
kernel/liveupdate/kexec_handover.c

index fbe109a0d858d23ef1c07baa533cf161a6ac1dbd..b0be06c41d92860dc5819b0fcf6fe3130c316ff9 100644 (file)
@@ -637,8 +637,10 @@ static void __init kho_reserve_scratch(void)
        kho_scratch_cnt = num_online_nodes() + 2;
        size = kho_scratch_cnt * sizeof(*kho_scratch);
        kho_scratch = memblock_alloc(size, PAGE_SIZE);
-       if (!kho_scratch)
+       if (!kho_scratch) {
+               pr_err("Failed to reserve scratch array\n");
                goto err_disable_kho;
+       }
 
        /*
         * reserve scratch area in low memory for lowmem allocations in the
@@ -647,8 +649,10 @@ static void __init kho_reserve_scratch(void)
        size = scratch_size_lowmem;
        addr = memblock_phys_alloc_range(size, CMA_MIN_ALIGNMENT_BYTES, 0,
                                         ARCH_LOW_ADDRESS_LIMIT);
-       if (!addr)
+       if (!addr) {
+               pr_err("Failed to reserve lowmem scratch buffer\n");
                goto err_free_scratch_desc;
+       }
 
        kho_scratch[i].addr = addr;
        kho_scratch[i].size = size;
@@ -657,8 +661,10 @@ static void __init kho_reserve_scratch(void)
        /* reserve large contiguous area for allocations without nid */
        size = scratch_size_global;
        addr = memblock_phys_alloc(size, CMA_MIN_ALIGNMENT_BYTES);
-       if (!addr)
+       if (!addr) {
+               pr_err("Failed to reserve global scratch buffer\n");
                goto err_free_scratch_areas;
+       }
 
        kho_scratch[i].addr = addr;
        kho_scratch[i].size = size;
@@ -669,8 +675,10 @@ static void __init kho_reserve_scratch(void)
                addr = memblock_alloc_range_nid(size, CMA_MIN_ALIGNMENT_BYTES,
                                                0, MEMBLOCK_ALLOC_ACCESSIBLE,
                                                nid, true);
-               if (!addr)
+               if (!addr) {
+                       pr_err("Failed to reserve nid %d scratch buffer\n", nid);
                        goto err_free_scratch_areas;
+               }
 
                kho_scratch[i].addr = addr;
                kho_scratch[i].size = size;