blob: e874a8b4f1658dec4a62018ec3f6108848c841a0 [file] [log] [blame]
Patrick Williams56b44a92024-01-19 08:49:29 -06001From b62c1da8f8e641397add10367ee9c4cfdedb1cc0 Mon Sep 17 00:00:00 2001
Brad Bishopc342db32019-05-15 21:57:59 -04002From: Haiqing Bai <Haiqing.Bai@windriver.com>
3Date: Mon, 9 Jan 2017 15:26:29 +0800
4Subject: [PATCH] kexec: ARM: Fix add_buffer_phys_virt() align issue
5
6When "CONFIG_ARM_LPAE" is enabled,3 level page table
7is used by MMU, the "SECTION_SIZE" is defined with
8(1 << 21), but 'add_buffer_phys_virt()' hardcode this
9to (1 << 20).
10
11Upstream-Status: Pending
12
13Suggested-By:fredrik.markstrom@gmail.com
14Signed-off-by: Haiqing Bai <Haiqing.Bai@windriver.com>
Patrick Williams56b44a92024-01-19 08:49:29 -060015
Brad Bishopc342db32019-05-15 21:57:59 -040016---
17 kexec/arch/arm/crashdump-arm.c | 5 ++++-
18 1 file changed, 4 insertions(+), 1 deletion(-)
19
20diff --git a/kexec/arch/arm/crashdump-arm.c b/kexec/arch/arm/crashdump-arm.c
Patrick Williams56b44a92024-01-19 08:49:29 -060021index 1ec1826..cc20f63 100644
Brad Bishopc342db32019-05-15 21:57:59 -040022--- a/kexec/arch/arm/crashdump-arm.c
23+++ b/kexec/arch/arm/crashdump-arm.c
Patrick Williams56b44a92024-01-19 08:49:29 -060024@@ -242,6 +242,7 @@ int load_crashdump_segments(struct kexec_info *info, char *mod_cmdline)
Brad Bishopc342db32019-05-15 21:57:59 -040025 void *buf;
26 int err;
27 int last_ranges;
28+ unsigned short align_bit_shift = 20;
29
30 /*
31 * First fetch all the memory (RAM) ranges that we are going to pass to
Patrick Williams56b44a92024-01-19 08:49:29 -060032@@ -283,6 +284,7 @@ int load_crashdump_segments(struct kexec_info *info, char *mod_cmdline)
Brad Bishopc342db32019-05-15 21:57:59 -040033
34 /* for support LPAE enabled kernel*/
35 elf_info.class = ELFCLASS64;
36+ align_bit_shift = 21;
37
38 err = crash_create_elf64_headers(info, &elf_info,
39 usablemem_rgns.ranges,
Patrick Williams56b44a92024-01-19 08:49:29 -060040@@ -304,8 +306,9 @@ int load_crashdump_segments(struct kexec_info *info, char *mod_cmdline)
Brad Bishopc342db32019-05-15 21:57:59 -040041 * 1MB) so that available memory passed in kernel command line will be
42 * aligned to 1MB. This is because kernel create_mapping() wants memory
43 * regions to be aligned to SECTION_SIZE.
44+ * The SECTION_SIZE of LPAE kernel is '1UL << 21' defined in pgtable-3level.h
45 */
46- elfcorehdr = add_buffer_phys_virt(info, buf, bufsz, bufsz, 1 << 20,
47+ elfcorehdr = add_buffer_phys_virt(info, buf, bufsz, bufsz, 1 << align_bit_shift,
48 crash_kernel_mem.start,
49 crash_kernel_mem.end, -1, 0);
50