All of lore.kernel.org
 help / color / mirror / Atom feed
From: sashiko-bot@kernel.org
To: "Chen Pei" <cp0613@linux.alibaba.com>,
	pjw@kernel.org, palmer@dabbelt.com, alex@ghiti.fr,
	rppt@kernel.org, pasha.tatashin@soleen.com, pratyush@kernel.org,
	graf@amazon.com, shuah@kernel.org
Cc: guoren@kernel.org, linux-mm@kvack.org, kexec@lists.infradead.org
Subject: Re: [PATCH v3 2/4] riscv: Add support for kexec handover (KHO)
Date: Sat, 07 Nov 2026 07:15:33 +0000	[thread overview]
Message-ID: <sashiko-outbox-202683@kernel.org> (raw)
In-Reply-To: <20261106071459.2003-3-cp0613@linux.alibaba.com>

Thank you for your contribution! Sashiko AI review found 2 potential
issues to consider:
- [High] riscv: kho: BUG_ON() in linear_mapping_pa_to_va() during
  efi_init()
- [Medium] riscv: kho: kho_reserve_bootmem() fails when DRAM starts at
  or above 4 GiB
--

commit 9359adbe095f746cadb4028ea618b75e0af09036
Author: Chen Pei <cp0613@linux.alibaba.com>

riscv: Add support for kexec handover (KHO)

This commit enables ARCH_SUPPORTS_KEXEC_HANDOVER on 64-bit RISC-V systems
with MMU support.

> diff --git a/arch/riscv/Kconfig b/arch/riscv/Kconfig
> index bde1f1885038f..bffef6b903e13 100644
> --- a/arch/riscv/Kconfig
> +++ b/arch/riscv/Kconfig
> @@ -1125,6 +1125,9 @@ config ARCH_SELECTS_KEXEC_FILE
>  config ARCH_SUPPORTS_KEXEC_PURGATORY
>  	def_bool ARCH_SUPPORTS_KEXEC_FILE
>  
> +config ARCH_SUPPORTS_KEXEC_HANDOVER
> +	def_bool 64BIT && MMU
> +
>  config ARCH_SUPPORTS_CRASH_DUMP
>  	def_bool y

[Severity: High]
Does enabling KEXEC_HANDOVER here hit BUG_ON(!kernel_map.va_pa_offset) in
linear_mapping_pa_to_va() during early boot on UEFI systems with
CONFIG_DEBUG_VIRTUAL=y?

In setup_arch(), parse_dtb() populates kho_in.fdt_phys, and then
efi_init() runs before paging_init():

arch/riscv/kernel/setup.c:setup_arch() {
    ...
	parse_dtb();
    ...
	efi_init();
	paging_init();
    ...
}

efi_init() -> reserve_regions() -> is_kho_boot() -> kho_get_fdt() calls
phys_to_virt(kho_in.fdt_phys), which translates to __va() ->
linear_mapping_pa_to_va().  On 64-bit RISC-V, kernel_map.va_pa_offset is
still 0 at that point because it is not initialized until paging_init() ->
setup_bootmem().

[Severity: Medium]
Can kho_reserve_bootmem() fail on 64-bit RISC-V systems where DRAM starts
at or above 4 GiB?

RISC-V does not define ARCH_LOW_ADDRESS_LIMIT, so it defaults to
0xffffffffUL in include/linux/memblock.h.  When all DRAM starts at or
above 4 GiB, bootmem_size_update() sets bootmem_size_lowmem to 0, and
kho_reserve_bootmem() unconditionally calls memblock_phys_alloc_range()
below ARCH_LOW_ADDRESS_LIMIT:

kernel/liveupdate/kexec_handover.c:kho_reserve_bootmem() {
    ...
	size = bootmem_size_lowmem;
	addr = memblock_phys_alloc_range(size, BOOTMEM_ALIGNMENT_BYTES, 0,
					 ARCH_LOW_ADDRESS_LIMIT);
	if (!addr) {
		pr_err("Failed to reserve lowmem bootmem\n");
		goto err_free_bootmem_desc;
	}
    ...
}

Because no memory exists below 4 GiB, the allocation returns 0 and aborts
KHO initialization.  Conversely, when all DRAM lies below 4 GiB,
bootmem_size_global is 0 and kho_reserve_bootmem() records a 0-byte entry
in kho_bootmem[], which causes kho_walk_bootmem() to build an inverted
struct resource with end = start - 1.

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20261106071459.2003-1-cp0613@linux.alibaba.com?part=2


  reply	other threads:[~2026-11-07  7:15 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-11-06  7:14 [PATCH v3 0/4] riscv: Enable kexec handover and live update Chen Pei
2026-11-06  7:14 ` Chen Pei
2026-11-06  7:14 ` [PATCH v3 1/4] riscv: Call early_ioremap_setup() before parsing the DTB Chen Pei
2026-11-06  7:14   ` Chen Pei
2026-11-07  7:15   ` sashiko-bot
2026-11-08 15:24   ` Pasha Tatashin
2026-11-08 15:24     ` Pasha Tatashin
2026-11-06  7:14 ` [PATCH v3 2/4] riscv: Add support for kexec handover (KHO) Chen Pei
2026-11-06  7:14   ` Chen Pei
2026-11-07  7:15   ` sashiko-bot [this message]
2026-11-07 15:27     ` Chen Pei
2026-11-08 15:24   ` Pasha Tatashin
2026-11-08 15:24     ` Pasha Tatashin
2026-11-10  9:24     ` Mike Rapoport
2026-11-10  9:24       ` Mike Rapoport
2026-11-06  7:14 ` [PATCH v3 3/4] selftests: kho: Add riscv support Chen Pei
2026-11-06  7:14   ` Chen Pei
2026-11-07  7:15   ` sashiko-bot
2026-11-08 11:16   ` Mike Rapoport
2026-11-08 11:16     ` Mike Rapoport
2026-11-08 15:24   ` Pasha Tatashin
2026-11-08 15:24     ` Pasha Tatashin
2026-11-06  7:14 ` [PATCH v3 4/4] selftests: liveupdate: " Chen Pei
2026-11-06  7:14   ` Chen Pei
2026-11-07  7:15   ` sashiko-bot
2026-11-08 11:16   ` Mike Rapoport
2026-11-08 11:16     ` Mike Rapoport
2026-11-08 15:24   ` Pasha Tatashin
2026-11-08 15:24     ` Pasha Tatashin
2026-11-09 12:28 ` [PATCH v3 0/4] riscv: Enable kexec handover and live update Chen Pei

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=sashiko-outbox-202683@kernel.org \
    --to=sashiko-bot@kernel.org \
    --cc=alex@ghiti.fr \
    --cc=cp0613@linux.alibaba.com \
    --cc=graf@amazon.com \
    --cc=guoren@kernel.org \
    --cc=kexec@lists.infradead.org \
    --cc=linux-mm@kvack.org \
    --cc=palmer@dabbelt.com \
    --cc=pasha.tatashin@soleen.com \
    --cc=pjw@kernel.org \
    --cc=pratyush@kernel.org \
    --cc=rppt@kernel.org \
    --cc=sashiko-reviews@lists.linux.dev \
    --cc=shuah@kernel.org \
    /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.