Skip to content

Commit

Permalink
ARM: Fix add_buffer_phys_virt() align issue
Browse files Browse the repository at this point in the history
When "CONFIG_ARM_LPAE" is enabled,3 level page table
is used by MMU, the "SECTION_SIZE" is defined with
(1 << 21), but 'add_buffer_phys_virt()' hardcode this
to (1 << 20).

Suggested-By: [email protected]
Signed-off-by: Haiqing Bai <[email protected]>
Signed-off-by: Alexander Kanavin <[email protected]>
Signed-off-by: Simon Horman <[email protected]>
  • Loading branch information
hbai-wr authored and horms committed Apr 26, 2024
1 parent f53bcef commit 2a3e54e
Showing 1 changed file with 4 additions and 1 deletion.
5 changes: 4 additions & 1 deletion kexec/arch/arm/crashdump-arm.c
Original file line number Diff line number Diff line change
Expand Up @@ -242,6 +242,7 @@ int load_crashdump_segments(struct kexec_info *info, char *mod_cmdline)
void *buf;
int err;
int last_ranges;
unsigned short align_bit_shift = 20;

/*
* First fetch all the memory (RAM) ranges that we are going to pass to
Expand Down Expand Up @@ -283,6 +284,7 @@ int load_crashdump_segments(struct kexec_info *info, char *mod_cmdline)

/* for support LPAE enabled kernel*/
elf_info.class = ELFCLASS64;
align_bit_shift = 21;

err = crash_create_elf64_headers(info, &elf_info,
usablemem_rgns.ranges,
Expand All @@ -304,8 +306,9 @@ int load_crashdump_segments(struct kexec_info *info, char *mod_cmdline)
* 1MB) so that available memory passed in kernel command line will be
* aligned to 1MB. This is because kernel create_mapping() wants memory
* regions to be aligned to SECTION_SIZE.
* The SECTION_SIZE of LPAE kernel is '1UL << 21' defined in pgtable-3level.h
*/
elfcorehdr = add_buffer_phys_virt(info, buf, bufsz, bufsz, 1 << 20,
elfcorehdr = add_buffer_phys_virt(info, buf, bufsz, bufsz, 1 << align_bit_shift,
crash_kernel_mem.start,
crash_kernel_mem.end, -1, 0);

Expand Down

0 comments on commit 2a3e54e

Please sign in to comment.