linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/1] arm64/cpufeature: Add an option for mte support
@ 2021-07-28  9:42 yee.lee
  2021-07-28  9:42 ` [PATCH 1/1] arm64/cpufeature: Add option to disable " yee.lee
  0 siblings, 1 reply; 4+ messages in thread
From: yee.lee @ 2021-07-28  9:42 UTC (permalink / raw)
  To: linux-kernel
  Cc: nicholas.Tang, Kuan-Ying.lee, chinwen.chang, Yee Lee,
	Matthias Brugger, moderated list:ARM/Mediatek SoC support,
	moderated list:ARM/Mediatek SoC support

From: Yee Lee <yee.lee@mediatek.com>

Arm64 introduced mte to enforce memory protection but also increased
the system requirements, such as the additional tag memory and the
firmware control complexity. For the case of products with limited 
resouce or low-power environment, the requirements to support mte 
is unlikely reached. Hence, a solution for low-end devices is 
necessary. 

This patch Add an option for mte support. An parameter from system
is used to indicate its states for all requirements. If not, mte
is disabled both in kernel and userspace. 

=== Test ===
QEMU5.2 + mte

passed cmdline : "arm64_mte_not_support"
boot log:
...(skip)
[    0.000000] CPU features: detected: Memory Tagging Extension
[    0.000000] CPU features: detected: Spectre-v2
[    0.000000] CPU features: detected: Spectre-v4
[    0.000000] CPU features: kernel page table isolation forced ON by KASLR
[    0.000000] CPU features: detected: Kernel page table isolation (KPTI)
[    0.000000] CPU features: MTE is disabled since system does not support.

Yee Lee (1):
  arm64/cpufeature: Add option to disable mte support

 arch/arm64/include/asm/cpufeature.h |  4 +++-
 arch/arm64/kernel/cpufeature.c      | 13 +++++++++++++
 arch/arm64/kernel/image-vars.h      |  3 +++
 3 files changed, 19 insertions(+), 1 deletion(-)

-- 
2.18.0


^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH 1/1] arm64/cpufeature: Add option to disable mte support
  2021-07-28  9:42 [PATCH 0/1] arm64/cpufeature: Add an option for mte support yee.lee
@ 2021-07-28  9:42 ` yee.lee
  2021-07-28  9:59   ` Suzuki K Poulose
  0 siblings, 1 reply; 4+ messages in thread
From: yee.lee @ 2021-07-28  9:42 UTC (permalink / raw)
  To: linux-kernel
  Cc: nicholas.Tang, Kuan-Ying.lee, chinwen.chang, Yee Lee,
	Catalin Marinas, Will Deacon, Matthias Brugger, Marc Zyngier,
	David Brazdil, Suzuki K Poulose, Mark Rutland, Ionela Voinescu,
	Amit Daniel Kachhap, Quentin Perret, Andrew Scull, James Morse,
	Fuad Tabba, moderated list:ARM64 PORT (AARCH64 ARCHITECTURE),
	moderated list:ARM/Mediatek SoC support

From: Yee Lee <yee.lee@mediatek.com>

Add a static key to exapnd the logic of system_supports_mte().
This function controls mte enablement in both EL1 and EL0.

The static key, "arm64_mte_support" is default true and can
be disabled via the early_param.

Signed-off-by: Yee Lee <yee.lee@mediatek.com>
---
 arch/arm64/include/asm/cpufeature.h |  4 +++-
 arch/arm64/kernel/cpufeature.c      | 13 +++++++++++++
 arch/arm64/kernel/image-vars.h      |  3 +++
 3 files changed, 19 insertions(+), 1 deletion(-)

diff --git a/arch/arm64/include/asm/cpufeature.h b/arch/arm64/include/asm/cpufeature.h
index 9bb9d11750d7..0e5c82f2e012 100644
--- a/arch/arm64/include/asm/cpufeature.h
+++ b/arch/arm64/include/asm/cpufeature.h
@@ -420,6 +420,7 @@ static __always_inline bool is_hyp_code(void)
 extern DECLARE_BITMAP(cpu_hwcaps, ARM64_NCAPS);
 extern struct static_key_false cpu_hwcap_keys[ARM64_NCAPS];
 extern struct static_key_false arm64_const_caps_ready;
+extern struct static_key_true arm64_mte_support;
 
 /* ARM64 CAPS + alternative_cb */
 #define ARM64_NPATCHABLE (ARM64_NCAPS + 1)
@@ -756,7 +757,8 @@ static __always_inline bool system_uses_irq_prio_masking(void)
 static inline bool system_supports_mte(void)
 {
 	return IS_ENABLED(CONFIG_ARM64_MTE) &&
-		cpus_have_const_cap(ARM64_MTE);
+		cpus_have_const_cap(ARM64_MTE) &&
+		static_branch_likely(&arm64_mte_support);
 }
 
 static inline bool system_has_prio_mask_debugging(void)
diff --git a/arch/arm64/kernel/cpufeature.c b/arch/arm64/kernel/cpufeature.c
index 0ead8bfedf20..b1602ad3d7c0 100644
--- a/arch/arm64/kernel/cpufeature.c
+++ b/arch/arm64/kernel/cpufeature.c
@@ -1840,9 +1840,22 @@ static void bti_enable(const struct arm64_cpu_capabilities *__unused)
 }
 #endif /* CONFIG_ARM64_BTI */
 
+DEFINE_STATIC_KEY_TRUE(arm64_mte_support);
+EXPORT_SYMBOL(arm64_mte_support);
 #ifdef CONFIG_ARM64_MTE
+static int __init disable_arm64_mte_support(char *str)
+{
+	static_branch_disable(&arm64_mte_support);
+	return 0;
+}
+early_param("arm64_mte_not_support", disable_arm64_mte_support);
+
 static void cpu_enable_mte(struct arm64_cpu_capabilities const *cap)
 {
+	if(!system_supports_mte()){
+		pr_info("MTE is disabled since system does not support.\n");
+		return ;
+	}
 	/*
 	 * Clear the tags in the zero page. This needs to be done via the
 	 * linear map which has the Tagged attribute.
diff --git a/arch/arm64/kernel/image-vars.h b/arch/arm64/kernel/image-vars.h
index c96a9a0043bf..04cf30ec84e7 100644
--- a/arch/arm64/kernel/image-vars.h
+++ b/arch/arm64/kernel/image-vars.h
@@ -83,6 +83,9 @@ KVM_NVHE_ALIAS(__icache_flags);
 KVM_NVHE_ALIAS(arm64_const_caps_ready);
 KVM_NVHE_ALIAS(cpu_hwcap_keys);
 
+/* Static key which indicates if system supports mte */
+KVM_NVHE_ALIAS(arm64_mte_support);
+
 /* Static keys which are set if a vGIC trap should be handled in hyp. */
 KVM_NVHE_ALIAS(vgic_v2_cpuif_trap);
 KVM_NVHE_ALIAS(vgic_v3_cpuif_trap);
-- 
2.18.0


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH 1/1] arm64/cpufeature: Add option to disable mte support
  2021-07-28  9:42 ` [PATCH 1/1] arm64/cpufeature: Add option to disable " yee.lee
@ 2021-07-28  9:59   ` Suzuki K Poulose
  2021-07-28 10:05     ` Marc Zyngier
  0 siblings, 1 reply; 4+ messages in thread
From: Suzuki K Poulose @ 2021-07-28  9:59 UTC (permalink / raw)
  To: yee.lee, linux-kernel
  Cc: nicholas.Tang, Kuan-Ying.lee, chinwen.chang, Catalin Marinas,
	Will Deacon, Matthias Brugger, Marc Zyngier, David Brazdil,
	Mark Rutland, Ionela Voinescu, Amit Daniel Kachhap,
	Quentin Perret, Andrew Scull, James Morse, Fuad Tabba,
	moderated list:ARM64 PORT (AARCH64 ARCHITECTURE),
	moderated list:ARM/Mediatek SoC support

On 28/07/2021 10:42, yee.lee@mediatek.com wrote:
> From: Yee Lee <yee.lee@mediatek.com>
> 
> Add a static key to exapnd the logic of system_supports_mte().
> This function controls mte enablement in both EL1 and EL0.
> 
> The static key, "arm64_mte_support" is default true and can
> be disabled via the early_param.

Please could we use the id-reg override mechanism and give it
an alias ?

See :

arch/arm64/kernel/idreg-override.c

And could add something along the lines of :

arm64.nomte


Cheers
Suzuki


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH 1/1] arm64/cpufeature: Add option to disable mte support
  2021-07-28  9:59   ` Suzuki K Poulose
@ 2021-07-28 10:05     ` Marc Zyngier
  0 siblings, 0 replies; 4+ messages in thread
From: Marc Zyngier @ 2021-07-28 10:05 UTC (permalink / raw)
  To: Suzuki K Poulose
  Cc: yee.lee, linux-kernel, nicholas.Tang, Kuan-Ying.lee,
	chinwen.chang, Catalin Marinas, Will Deacon, Matthias Brugger,
	David Brazdil, Mark Rutland, Ionela Voinescu,
	Amit Daniel Kachhap, Quentin Perret, Andrew Scull, James Morse,
	Fuad Tabba, moderated list:ARM64 PORT (AARCH64 ARCHITECTURE),
	moderated list:ARM/Mediatek SoC support

On Wed, 28 Jul 2021 10:59:24 +0100,
Suzuki K Poulose <suzuki.poulose@arm.com> wrote:
> 
> On 28/07/2021 10:42, yee.lee@mediatek.com wrote:
> > From: Yee Lee <yee.lee@mediatek.com>
> > 
> > Add a static key to exapnd the logic of system_supports_mte().
> > This function controls mte enablement in both EL1 and EL0.
> > 
> > The static key, "arm64_mte_support" is default true and can
> > be disabled via the early_param.
> 
> Please could we use the id-reg override mechanism and give it
> an alias ?
> 
> See :
> 
> arch/arm64/kernel/idreg-override.c
> 
> And could add something along the lines of :
> 
> arm64.nomte

Damn, you beat me to it! :D

	M.

-- 
Without deviation from the norm, progress is not possible.

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2021-07-28 10:05 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-07-28  9:42 [PATCH 0/1] arm64/cpufeature: Add an option for mte support yee.lee
2021-07-28  9:42 ` [PATCH 1/1] arm64/cpufeature: Add option to disable " yee.lee
2021-07-28  9:59   ` Suzuki K Poulose
2021-07-28 10:05     ` Marc Zyngier

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).