[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <f5dbffae-52a5-4992-95a8-d47c925e286f@arm.com>
Date: Wed, 5 Nov 2025 11:00:49 +0530
From: Anshuman Khandual <anshuman.khandual@....com>
To: Will Deacon <will@...nel.org>
Cc: linux-arm-kernel@...ts.infradead.org,
Catalin Marinas <catalin.marinas@....com>, linux-kernel@...r.kernel.org,
ryan.roberts@....com
Subject: Re: [PATCH] arm64/mm: Drop redundant extern declaration for
rodata_full
On 04/11/25 9:13 PM, Will Deacon wrote:
> On Wed, Oct 15, 2025 at 03:36:09AM +0100, Anshuman Khandual wrote:
>> Drop the redundant extern declaration 'rodata_full' which can be included
>> via the header <asm/setup.h> after moving exiting declaration outside the
>> function arch_parse_debug_rodata(). While here also drop 'rodata_enabled'
>> which is anyways available via the generic header <linux/init.h>.
>>
>> Cc: Catalin Marinas <catalin.marinas@....com>
>> Cc: Will Deacon <will@...nel.org>
>> Cc: linux-arm-kernel@...ts.infradead.org
>> Cc: linux-kernel@...r.kernel.org
>> Signed-off-by: Anshuman Khandual <anshuman.khandual@....com>
>> ---
>> arch/arm64/include/asm/mmu_context.h | 2 --
>> arch/arm64/include/asm/setup.h | 4 +---
>> 2 files changed, 1 insertion(+), 5 deletions(-)
>>
>> diff --git a/arch/arm64/include/asm/mmu_context.h b/arch/arm64/include/asm/mmu_context.h
>> index 0375ca3162ff..e4b3563e1d96 100644
>> --- a/arch/arm64/include/asm/mmu_context.h
>> +++ b/arch/arm64/include/asm/mmu_context.h
>> @@ -26,8 +26,6 @@
>> #include <asm/sysreg.h>
>> #include <asm/tlbflush.h>
>>
>> -extern bool rodata_full;
>> -
>> static inline void contextidr_thread_switch(struct task_struct *next)
>> {
>> if (!IS_ENABLED(CONFIG_PID_IN_CONTEXTIDR))
>> diff --git a/arch/arm64/include/asm/setup.h b/arch/arm64/include/asm/setup.h
>> index 3d96dde4d214..902f1aab520f 100644
>> --- a/arch/arm64/include/asm/setup.h
>> +++ b/arch/arm64/include/asm/setup.h
>> @@ -12,12 +12,10 @@
>> */
>> extern phys_addr_t __fdt_pointer __initdata;
>> extern u64 __cacheline_aligned boot_args[4];
>> +extern bool rodata_full;
>>
>> static inline bool arch_parse_debug_rodata(char *arg)
>> {
>> - extern bool rodata_enabled;
>> - extern bool rodata_full;
>> -
>> if (!arg)
>> return false;
>
> It would probably be cleaner to make 'rodata_full' static in mm/pageattr.c,
> move the guts of arch_parse_debug_rodata in there and then consolidate
> can_set_direct_map() and force_pte_mapping().
>
> You need to talk to Ryan for the last part, as David's made some
> suggestions around that too.
Sure will talk to Ryan about this. But for the above suggestion - probably something
like the following (untested) should work.
diff --git a/arch/arm64/include/asm/mmu_context.h b/arch/arm64/include/asm/mmu_context.h
index 0dbe3b29049b..ddb964e916e1 100644
--- a/arch/arm64/include/asm/mmu_context.h
+++ b/arch/arm64/include/asm/mmu_context.h
@@ -26,8 +26,6 @@
#include <asm/sysreg.h>
#include <asm/tlbflush.h>
-extern bool rodata_full;
-
static inline void contextidr_thread_switch(struct task_struct *next)
{
if (!IS_ENABLED(CONFIG_PID_IN_CONTEXTIDR))
diff --git a/arch/arm64/include/asm/setup.h b/arch/arm64/include/asm/setup.h
index 3d96dde4d214..fa77a7208826 100644
--- a/arch/arm64/include/asm/setup.h
+++ b/arch/arm64/include/asm/setup.h
@@ -13,32 +13,7 @@
extern phys_addr_t __fdt_pointer __initdata;
extern u64 __cacheline_aligned boot_args[4];
-static inline bool arch_parse_debug_rodata(char *arg)
-{
- extern bool rodata_enabled;
- extern bool rodata_full;
-
- if (!arg)
- return false;
-
- if (!strcmp(arg, "on")) {
- rodata_enabled = rodata_full = true;
- return true;
- }
-
- if (!strcmp(arg, "off")) {
- rodata_enabled = rodata_full = false;
- return true;
- }
-
- if (!strcmp(arg, "noalias")) {
- rodata_enabled = true;
- rodata_full = false;
- return true;
- }
-
- return false;
-}
+bool arch_parse_debug_rodata(char *arg);
#define arch_parse_debug_rodata arch_parse_debug_rodata
#endif
diff --git a/arch/arm64/mm/mmu.c b/arch/arm64/mm/mmu.c
index b8d37eb037fc..030ee4ba8a7a 100644
--- a/arch/arm64/mm/mmu.c
+++ b/arch/arm64/mm/mmu.c
@@ -1014,9 +1014,7 @@ static inline bool force_pte_mapping(void)
bool bbml2 = system_capabilities_finalized() ?
system_supports_bbml2_noabort() : cpu_supports_bbml2_noabort();
- return (!bbml2 && (rodata_full || arm64_kfence_can_set_direct_map() ||
- is_realm_world())) ||
- debug_pagealloc_enabled();
+ return debug_pagealloc_enabled() || (!bbml2 && can_set_direct_map());
}
static void __init map_mem(pgd_t *pgdp)
diff --git a/arch/arm64/mm/pageattr.c b/arch/arm64/mm/pageattr.c
index 5135f2d66958..60d372c630eb 100644
--- a/arch/arm64/mm/pageattr.c
+++ b/arch/arm64/mm/pageattr.c
@@ -80,7 +80,31 @@ static const struct mm_walk_ops pageattr_ops = {
.pte_entry = pageattr_pte_entry,
};
-bool rodata_full __ro_after_init = true;
+static bool rodata_full __ro_after_init = true;
+
+bool arch_parse_debug_rodata(char *arg)
+{
+ if (!arg)
+ return false;
+
+ if (!strcmp(arg, "on")) {
+ rodata_enabled = rodata_full = true;
+ return true;
+ }
+
+ if (!strcmp(arg, "off")) {
+ rodata_enabled = rodata_full = false;
+ return true;
+ }
+
+ if (!strcmp(arg, "noalias")) {
+ rodata_enabled = true;
+ rodata_full = false;
+ return true;
+ }
+
+ return false;
+}
bool can_set_direct_map(void)
{
--
2.30.2
Powered by blists - more mailing lists