All of lore.kernel.org
 help / color / mirror / Atom feed
From: Pasha Tatashin <pasha.tatashin@soleen.com>
To: Mike Rapoport <rppt@kernel.org>
Cc: Pasha Tatashin <pasha.tatashin@soleen.com>,
	 Pratyush Yadav <pratyush@kernel.org>,
	Alexander Graf <graf@amazon.com>,
	 Andrew Morton <akpm@linux-foundation.org>,
	Chen Pei <cp0613@linux.alibaba.com>,
	 George Guo <guodongtai@kylinos.cn>,
	Kexin Liu <liukexin@kylinos.cn>,
	 Sourabh Jain <sourabhjain@linux.ibm.com>,
	kexec@lists.infradead.org, linux-kernel@vger.kernel.org,
	 linux-mm@kvack.org
Subject: Re: [PATCH 1/2] kho: skip zero-sized lowmem and global bootmem areas
Date: Wed, 4 Nov 2026 10:32:14 -0500	[thread overview]
Message-ID: <autM3_pSLuOGZQCh@google.com> (raw)
In-Reply-To: <ausVbqZd9qgZf4zc@kernel.org>

On 11-04 13:22, Mike Rapoport wrote:
> On Tue, Nov 03, 2026 at 02:48:36PM -0500, Pasha Tatashin wrote:
> > On 11-03 13:49, Mike Rapoport (Microsoft) wrote:
> > > The lowmem and the global bootmem areas can have zero size, for example
> > > when none or all of the memory is below ARCH_LOW_ADDRESS_LIMIT, or when
> > > either of those areas is explicitly set to zero with kho_bootmem=.
> > > 
> > > For a zero-sized allocation memblock returns an address without reserving
> > > anything, and that empty area is recorded in kho_bootmem. If there is no
> > > memory below ARCH_LOW_ADDRESS_LIMIT, allocation of the empty lowmem area
> > > fails and KHO gets disabled.
> > > 
> > > Extract a helper that checks for zero size and allocates memory from
> > > memblock, and use it to skip empty areas the same way as empty per-node
> > > areas are skipped.
> > > 
> > > Fixes: 3dc92c311498 ("kexec: add Kexec HandOver (KHO) generation helpers")
> > > Reported-by: Chen Pei <cp0613@linux.alibaba.com>
> > > Closes: https://lore.kernel.org/all/20261026131851.9942-1-cp0613@linux.alibaba.com
> > > Signed-off-by: Mike Rapoport (Microsoft) <rppt@kernel.org>
> > > ---
> > >  kernel/liveupdate/kexec_handover.c | 61 ++++++++++++++++++--------------------
> > >  1 file changed, 29 insertions(+), 32 deletions(-)
> > > 
> > > diff --git a/kernel/liveupdate/kexec_handover.c b/kernel/liveupdate/kexec_handover.c
> > > index 6f1f55fe31819..f268c57413a7e 100644
> > > --- a/kernel/liveupdate/kexec_handover.c
> > > +++ b/kernel/liveupdate/kexec_handover.c
> > > @@ -820,6 +820,27 @@ bool kho_bootmem_overlap(phys_addr_t phys, size_t size)
> > >  	return false;
> > >  }
> > >  
> > > +static int __init kho_reserve_bootmem_area(int *idx, phys_addr_t size,
> > > +					   phys_addr_t end, int nid)
> > > +{
> > > +	phys_addr_t addr;
> > > +	int i = *idx;
> > > +
> > > +	if (!size)
> > > +		return 0;
> > > +
> > > +	addr = memblock_alloc_range_nid(size, BOOTMEM_ALIGNMENT_BYTES, 0, end,
> > > +					nid, true);
> > > +	if (!addr)
> > > +		return -ENOMEM;
> > > +
> > > +	kho_bootmem[i].addr = addr;
> > > +	kho_bootmem[i].size = size;
> > > +	*idx = i + 1;
> > > +
> > > +	return 0;
> > > +}
> > > +
> > >  /**
> > >   * kho_reserve_bootmem - Reserve a contiguous chunk of memory for kexec
> > >   *
> > > @@ -832,7 +853,7 @@ bool kho_bootmem_overlap(phys_addr_t phys, size_t size)
> > >  static void __init kho_reserve_bootmem(void)
> > >  {
> > >  	int nid, i = 0, max_nr_bootmem;
> > > -	phys_addr_t addr, size;
> > > +	phys_addr_t size;
> > >  
> > >  	if (!kho_enable)
> > >  		return;
> > > @@ -852,56 +873,32 @@ static void __init kho_reserve_bootmem(void)
> > >  	 * reserve bootmem area in low memory for lowmem allocations in the
> > >  	 * next kernel
> > >  	 */
> > > -	size = bootmem_size_lowmem;
> > > -	addr = memblock_phys_alloc_range(size, BOOTMEM_ALIGNMENT_BYTES, 0,
> > > -					 ARCH_LOW_ADDRESS_LIMIT);
> > > -	if (!addr) {
> > > +	if (kho_reserve_bootmem_area(&i, bootmem_size_lowmem,
> > > +				     ARCH_LOW_ADDRESS_LIMIT, NUMA_NO_NODE)) {
> > >  		pr_err("Failed to reserve lowmem bootmem\n");
> > 
> > You are adding a helper that returns an error code and then ignoring it 
> > at all call sites. Even though it can only return -ENOMEM right now, 
> > dropping the return value is not good practice.
> 
> I don't think error code is important here.

Perhaps, but it is just not elegant to add a function that returns an 
error, call that function from three places, and ignore that error every 
time.

What is wrong with:

err = kho_reserve_bootmem_area(...);
if (err) {
        pr_err("Failed to reserve lowmem bootmem: %pe\n", ERR_PTR(err));
        ...
}

> Even if some theoretical future update will change
> kho_reserve_bootmem_area() to return anything but -ENOMEM I don't see why
> the error code should be printed at all.
> 
> And anyway, that would be the part of that change.

I just don't see why not do it right away? If the function is only used 
as a boolean check, then just make it return a bool, and move prints 
inside.

In any case, this is not critical and I am not insisting on the change, 
but I think it would look better.

> 
> -- 
> Sincerely yours,
> Mike.

-- 
Pasha


  reply	other threads:[~2026-11-04 15:32 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-11-03 11:49 [PATCH 0/2] kho: fix bootmem sizing Mike Rapoport (Microsoft)
2026-11-03 11:49 ` [PATCH 1/2] kho: skip zero-sized lowmem and global bootmem areas Mike Rapoport (Microsoft)
2026-11-03 14:14   ` Pratyush Yadav
2026-11-03 18:32     ` Mike Rapoport
2026-11-04 12:09       ` Pratyush Yadav
2026-11-03 19:48   ` Pasha Tatashin
2026-11-04 11:22     ` Mike Rapoport
2026-11-04 15:32       ` Pasha Tatashin [this message]
2026-11-04 16:50         ` Mike Rapoport
2026-11-03 11:49 ` [PATCH 2/2] kho: fix bootmem sizing Mike Rapoport (Microsoft)
2026-11-03 16:01   ` Pratyush Yadav
2026-11-03 18:36     ` Mike Rapoport
2026-11-04 12:13       ` Pratyush Yadav

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=autM3_pSLuOGZQCh@google.com \
    --to=pasha.tatashin@soleen.com \
    --cc=akpm@linux-foundation.org \
    --cc=cp0613@linux.alibaba.com \
    --cc=graf@amazon.com \
    --cc=guodongtai@kylinos.cn \
    --cc=kexec@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=liukexin@kylinos.cn \
    --cc=pratyush@kernel.org \
    --cc=rppt@kernel.org \
    --cc=sourabhjain@linux.ibm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.