arm64: mm: Rework the 'rodata=' options

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.

For parity with other architectures, namely x86, rework 'rodata=on' to
match the current "full" behaviour and replace 'rodata=full' with a new
'rodata=noalias' option which retains writable aliases in the direct map
for memory regions outside of the kernel image.

Signed-off-by: Huang Shijie <shijie@os.amperecomputing.com>
Reviewed-by: Anshuman Khandual <anshuman.khandual@arm.com>
Signed-off-by: Will Deacon <will@kernel.org>
This commit is contained in:
Huang Shijie 2025-09-09 11:32:35 +08:00 committed by Will Deacon
parent b868fff5b1
commit c0f303d7d4
2 changed files with 5 additions and 4 deletions

View file

@ -6405,8 +6405,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]
rockchip.usb_uart
[EARLY]

View file

@ -21,7 +21,7 @@ static inline bool arch_parse_debug_rodata(char *arg)
if (!arg)
return false;
if (!strcmp(arg, "full")) {
if (!strcmp(arg, "on")) {
rodata_enabled = rodata_full = true;
return true;
}
@ -31,7 +31,7 @@ static inline bool arch_parse_debug_rodata(char *arg)
return true;
}
if (!strcmp(arg, "on")) {
if (!strcmp(arg, "noalias")) {
rodata_enabled = true;
rodata_full = false;
return true;