[PATCH] riscv: kexec_file: Constrain segment placement to direct map
Paul Walmsley
pjw at kernel.org
Thu May 21 15:14:27 PDT 2026
On Wed, 20 May 2026, Han Gao wrote:
> When kexec_file_load places segments with buf_max=ULONG_MAX and
> top_down=true, they land at the highest available physical addresses.
> On RISC-V the size of the linear mapping is determined by the active
> VM mode: SV39 caps the direct map at roughly 128GB, while SV48/SV57
> extend the range substantially further. When the installed physical
> memory exceeds the direct map size of the active mode, top-down
> placement puts DTB/initrd at physical addresses outside the linearly
> mapped region. The kexec'd kernel cannot reach them during early
> boot, triggering a page fault at memcmp in start_kernel.
>
> Fix by constraining buf_max to PFN_PHYS(max_low_pfn), which reflects
> the runtime direct map boundary for the active VM mode (SV39/SV48/
> SV57). This keeps all kexec segments within the linearly mapped
> region while preserving the upstream top_down allocation strategy.
>
> Signed-off-by: Han Gao <gaohan at iscas.ac.cn>
Thanks, queued for v7.1-rc.
- Paul
More information about the linux-riscv
mailing list