On Fri, Jan 16, 2026 at 8:54 AM Pratyush Yadav <[email protected]> wrote: > > From: "Pratyush Yadav (Google)" <[email protected]> > > 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. > > Signed-off-by: Pratyush Yadav (Google) <[email protected]> > --- > kernel/liveupdate/kexec_handover.c | 16 ++++++++++++---- > 1 file changed, 12 insertions(+), 4 deletions(-) > > diff --git a/kernel/liveupdate/kexec_handover.c > b/kernel/liveupdate/kexec_handover.c > index 49bf2cecab12..636bd96780ae 100644 > --- a/kernel/liveupdate/kexec_handover.c > +++ b/kernel/liveupdate/kexec_handover.c > @@ -651,8 +651,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 > @@ -661,8 +663,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; > @@ -671,8 +675,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; > @@ -683,8 +689,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; > > base-commit: c37fac0551448c68e36f14782acaf662c7a1775e > -- > 2.52.0.457.g6b5491de43-goog >
Reviewed-by: Samiullah Khawaja <[email protected]> Tested-by: Samiullah Khawaja <[email protected]> Tested on my test machine while investigating the scratch space allocation failure.
