aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSong Shuai <songshuaishuai@tinylab.org>2023-09-06 17:58:17 +0800
committerPalmer Dabbelt <palmer@rivosinc.com>2023-09-12 13:58:39 -0700
commit1bfb2b618d52e59a4ef1896b46c4698ad2be66b7 (patch)
tree7a60648daf5d99045df93fbcfdc7a7b177fb7d25
parent0bb80ecc33a8fb5a682236443c1e740d5c917d1d (diff)
downloadlinux-1bfb2b618d52e59a4ef1896b46c4698ad2be66b7.tar.gz
riscv: kexec: Align the kexeced kernel entry
The current riscv boot protocol requires 2MB alignment for RV64 and 4MB alignment for RV32. In KEXEC_FILE path, the elf_find_pbase() function should align the kexeced kernel entry according to the requirement, otherwise the kexeced kernel would silently BUG at the setup_vm(). Fixes: 8acea455fafa ("RISC-V: Support for kexec_file on panic") Signed-off-by: Song Shuai <songshuaishuai@tinylab.org> Link: https://lore.kernel.org/r/20230906095817.364390-1-songshuaishuai@tinylab.org Signed-off-by: Palmer Dabbelt <palmer@rivosinc.com>
-rw-r--r--arch/riscv/kernel/elf_kexec.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/arch/riscv/kernel/elf_kexec.c b/arch/riscv/kernel/elf_kexec.c
index f4099059ed8f25..e60fbd8660c4a5 100644
--- a/arch/riscv/kernel/elf_kexec.c
+++ b/arch/riscv/kernel/elf_kexec.c
@@ -98,7 +98,13 @@ static int elf_find_pbase(struct kimage *image, unsigned long kernel_len,
kbuf.image = image;
kbuf.buf_min = lowest_paddr;
kbuf.buf_max = ULONG_MAX;
- kbuf.buf_align = PAGE_SIZE;
+
+ /*
+ * Current riscv boot protocol requires 2MB alignment for
+ * RV64 and 4MB alignment for RV32
+ *
+ */
+ kbuf.buf_align = PMD_SIZE;
kbuf.mem = KEXEC_BUF_MEM_UNKNOWN;
kbuf.memsz = ALIGN(kernel_len, PAGE_SIZE);
kbuf.top_down = false;