Linux Documentation
 help / color / mirror / Atom feed
From: Huang Shijie <shijie@os.amperecomputing.com>
To: catalin.marinas@arm.com, will@kernel.org
Cc: patches@amperecomputing.com, cl@linux.com,
	Shubhang@os.amperecomputing.com, corbet@lwn.net,
	paulmck@kernel.org, akpm@linux-foundation.org,
	rostedt@goodmis.org, Neeraj.Upadhyay@amd.com, bp@alien8.de,
	ardb@kernel.org, anshuman.khandual@arm.com,
	suzuki.poulose@arm.com, linux-doc@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org, rdunlap@infradead.org,
	Huang Shijie <shijie@os.amperecomputing.com>
Subject: [PATCH v7 1/2] arm64: refactor the rodata=xxx
Date: Tue,  9 Sep 2025 11:32:35 +0800	[thread overview]
Message-ID: <20250909033236.4099-2-shijie@os.amperecomputing.com> (raw)
In-Reply-To: <20250909033236.4099-1-shijie@os.amperecomputing.com>

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
    them susceptible to inadvertent modification by software.

Signed-off-by: Huang Shijie <shijie@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]
 
 	rockchip.usb_uart
 			[EARLY]
diff --git a/arch/arm64/include/asm/setup.h b/arch/arm64/include/asm/setup.h
index ba269a7a3201..3d96dde4d214 100644
--- a/arch/arm64/include/asm/setup.h
+++ b/arch/arm64/include/asm/setup.h
@@ -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;
-- 
2.40.1


  reply	other threads:[~2025-09-09  3:35 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-09-09  3:32 [PATCH v7 0/2] arm64: refactor the rodata=xxx Huang Shijie
2025-09-09  3:32 ` Huang Shijie [this message]
2025-09-09  4:29   ` [PATCH v7 1/2] " Anshuman Khandual
2025-09-09  5:26     ` Shijie Huang
2025-09-09  6:03       ` Anshuman Khandual
2025-09-09  3:32 ` [PATCH v7 2/2] arm64/Kconfig: Remove CONFIG_RODATA_FULL_DEFAULT_ENABLED Huang Shijie
2025-09-16 21:13 ` [PATCH v7 0/2] arm64: refactor the rodata=xxx Will Deacon

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20250909033236.4099-2-shijie@os.amperecomputing.com \
    --to=shijie@os.amperecomputing.com \
    --cc=Neeraj.Upadhyay@amd.com \
    --cc=Shubhang@os.amperecomputing.com \
    --cc=akpm@linux-foundation.org \
    --cc=anshuman.khandual@arm.com \
    --cc=ardb@kernel.org \
    --cc=bp@alien8.de \
    --cc=catalin.marinas@arm.com \
    --cc=cl@linux.com \
    --cc=corbet@lwn.net \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=patches@amperecomputing.com \
    --cc=paulmck@kernel.org \
    --cc=rdunlap@infradead.org \
    --cc=rostedt@goodmis.org \
    --cc=suzuki.poulose@arm.com \
    --cc=will@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox