[PATCH v7 1/2] arm64: refactor the rodata=xxx
Anshuman Khandual
anshuman.khandual at arm.com
Mon Sep 8 23:03:27 PDT 2025
On 09/09/25 10:56 AM, Shijie Huang wrote:
>
> On 09/09/2025 12:29, Anshuman Khandual wrote:
>> On 09/09/25 9:02 AM, Huang Shijie wrote:
>>> As per admin guide documentation, "rodata=on" should be the default on
>>> platforms. Documentation/admin-guide/kernel-parameters.txt describes
>>> these options as
>>>
>>> rodata= [KNL,EARLY]
>>> on Mark read-only kernel memory as read-only (default).
>>> off Leave read-only kernel memory writable for debugging.
>>> full Mark read-only kernel memory and aliases as read-only
>>> [arm64]
>>>
>>> But on arm64 platform, RODATA_FULL_DEFAULT_ENABLED is enabled by default,
>>> so "rodata=full" is the default instead.
>>>
>>> This patch implements the following changes:
>>> - Make "rodata=on" behaviour same as the original "rodata=full".
>>> This keeps align with the x86.
>>> - Make "rodata=noalias" (new) behaviour same as the original "rodata=on"
>>> - Drop the original "rodata=full"
>>>
>>> After this patch, the "rodata=on" will be the default on arm64 platform
>>> as well.
>>>
>>> Different rodata options may have different performance, so record more
>>> detail information here:
>>>
>>> rodata=on (default)
>>> This applies read-only attributes to VM areas and to the linear
>>> alias of the backing pages as well. This prevents code or read-
>>> only data from being modified (inadvertently or intentionally),
>>> via another mapping for the same memory page.
>>>
>>> But this might cause linear map region to be mapped down to base
>>> pages, which may adversely affect performance in some cases.
>>>
>>> rodata=off
>>> This provides more block mappings and contiguous hints for linear
>>> map region which would minimize TLB footprint. This also leaves
>>> read-only kernel memory writable for debugging.
>>>
>>> rodata=noalias
>>> This provides more block mappings and contiguous hints for linear
>>> map region which would minimize TLB footprint. This leaves the linear
>>> alias of read-only mappings in the vmalloc space writeable, making
>> typo ^^^^^^^^
> What's the typo? It seems "writeable" is okay.
Alright.
>>> them susceptible to inadvertent modification by software.
>>>
>>> Signed-off-by: Huang Shijie <shijie at os.amperecomputing.com>
>>> ---
>>> Documentation/admin-guide/kernel-parameters.txt | 5 +++--
>>> arch/arm64/include/asm/setup.h | 4 ++--
>>> 2 files changed, 5 insertions(+), 4 deletions(-)
>>>
>>> diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt
>>> index db84a629f7b1..138e0db5af64 100644
>>> --- a/Documentation/admin-guide/kernel-parameters.txt
>>> +++ b/Documentation/admin-guide/kernel-parameters.txt
>>> @@ -6418,8 +6418,9 @@
>>> rodata= [KNL,EARLY]
>>> on Mark read-only kernel memory as read-only (default).
>>> off Leave read-only kernel memory writable for debugging.
>>> - full Mark read-only kernel memory and aliases as read-only
>>> - [arm64]
>>> + noalias Mark read-only kernel memory as read-only but retain
>>> + writable aliases in the direct map for regions outside
>>> + of the kernel image. [arm64]
>> Should not the arm64 specific performance implications be mentioned
>> in the above documentation update as well ? But in case this appears
>> too much platform specific - probably do consider adding them above
>> or inside arch_parse_debug_rodata() as an in-code documentation.
>
> Will had already suggested do not add them for the arch_parse_debug_rodata():
>
> https://lists.infradead.org/pipermail/linux-arm-kernel/2025-September/1060135.html
Alright.
Reviewed-by: Anshuman Khandual <anshuman.khandual at arm.com>
More information about the linux-arm-kernel
mailing list