Commit e16e65a0 authored by Ard Biesheuvel's avatar Ard Biesheuvel Committed by Catalin Marinas

arm64: remove CONFIG_DEBUG_ALIGN_RODATA feature

When CONFIG_DEBUG_ALIGN_RODATA is enabled, kernel segments mapped with
different permissions (r-x for .text, r-- for .rodata, rw- for .data,
etc) are rounded up to 2 MiB so they can be mapped more efficiently.
In particular, it permits the segments to be mapped using level 2
block entries when using 4k pages, which is expected to result in less
TLB pressure.

However, the mappings for the bulk of the kernel will use level 2
entries anyway, and the misaligned fringes are organized such that they
can take advantage of the contiguous bit, and use far fewer level 3
entries than would be needed otherwise.

This makes the value of this feature dubious at best, and since it is not
enabled in defconfig or in the distro configs, it does not appear to be
in wide use either. So let's just remove it.
Signed-off-by: default avatarArd Biesheuvel <ardb@kernel.org>
Acked-by: default avatarMark Rutland <mark.rutland@arm.com>
Acked-by: default avatarWill Deacon <will@kernel.org>
Acked-by: default avatarLaura Abbott <labbott@kernel.org>
Signed-off-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
parent b8fdef31
...@@ -52,19 +52,6 @@ config DEBUG_WX ...@@ -52,19 +52,6 @@ config DEBUG_WX
If in doubt, say "Y". If in doubt, say "Y".
config DEBUG_ALIGN_RODATA
depends on STRICT_KERNEL_RWX
bool "Align linker sections up to SECTION_SIZE"
help
If this option is enabled, sections that may potentially be marked as
read only or non-executable will be aligned up to the section size of
the kernel. This prevents sections from being split into pages and
avoids a potential TLB penalty. The downside is an increase in
alignment and potentially wasted space. Turn on this option if
performance is more important than memory pressure.
If in doubt, say N.
config DEBUG_EFI config DEBUG_EFI
depends on EFI && DEBUG_INFO depends on EFI && DEBUG_INFO
bool "UEFI debugging" bool "UEFI debugging"
......
...@@ -120,22 +120,12 @@ ...@@ -120,22 +120,12 @@
/* /*
* Alignment of kernel segments (e.g. .text, .data). * Alignment of kernel segments (e.g. .text, .data).
*/ *
#if defined(CONFIG_DEBUG_ALIGN_RODATA)
/*
* 4 KB granule: 1 level 2 entry
* 16 KB granule: 128 level 3 entries, with contiguous bit
* 64 KB granule: 32 level 3 entries, with contiguous bit
*/
#define SEGMENT_ALIGN SZ_2M
#else
/*
* 4 KB granule: 16 level 3 entries, with contiguous bit * 4 KB granule: 16 level 3 entries, with contiguous bit
* 16 KB granule: 4 level 3 entries, without contiguous bit * 16 KB granule: 4 level 3 entries, without contiguous bit
* 64 KB granule: 1 level 3 entry * 64 KB granule: 1 level 3 entry
*/ */
#define SEGMENT_ALIGN SZ_64K #define SEGMENT_ALIGN SZ_64K
#endif
/* /*
* Memory types available. * Memory types available.
......
...@@ -82,14 +82,12 @@ efi_status_t handle_kernel_image(unsigned long *image_addr, ...@@ -82,14 +82,12 @@ efi_status_t handle_kernel_image(unsigned long *image_addr,
if (IS_ENABLED(CONFIG_RANDOMIZE_BASE) && phys_seed != 0) { if (IS_ENABLED(CONFIG_RANDOMIZE_BASE) && phys_seed != 0) {
/* /*
* If CONFIG_DEBUG_ALIGN_RODATA is not set, produce a * Produce a displacement in the interval [0, MIN_KIMG_ALIGN)
* displacement in the interval [0, MIN_KIMG_ALIGN) that * that doesn't violate this kernel's de-facto alignment
* doesn't violate this kernel's de-facto alignment
* constraints. * constraints.
*/ */
u32 mask = (MIN_KIMG_ALIGN - 1) & ~(EFI_KIMG_ALIGN - 1); u32 mask = (MIN_KIMG_ALIGN - 1) & ~(EFI_KIMG_ALIGN - 1);
u32 offset = !IS_ENABLED(CONFIG_DEBUG_ALIGN_RODATA) ? u32 offset = (phys_seed >> 32) & mask;
(phys_seed >> 32) & mask : TEXT_OFFSET;
/* /*
* With CONFIG_RANDOMIZE_TEXT_OFFSET=y, TEXT_OFFSET may not * With CONFIG_RANDOMIZE_TEXT_OFFSET=y, TEXT_OFFSET may not
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment