[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