Messages in this thread Patch in this message | | | From | Yian Chen <> | Subject | [PATCH 5/7] x86/cpu: Enable LASS (Linear Address Space Separation) | Date | Mon, 9 Jan 2023 21:52:02 -0800 |
| |
LASS is enabled via setting a CR4 bit if the platform supports the feature.
LASS may be disabled in early boot time, for example, by command line parameter clearcpuid=lass/390 or vsyscall flag. In such cases, the CPU feature and CR4 bits will be cleared.
Signed-off-by: Yian Chen <yian.chen@intel.com> Reviewed-by: Tony Luck <tony.luck@intel.com> --- arch/x86/kernel/cpu/common.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+)
diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c index 9cfca3d7d0e2..efc7c7623968 100644 --- a/arch/x86/kernel/cpu/common.c +++ b/arch/x86/kernel/cpu/common.c @@ -412,6 +412,23 @@ static __always_inline void setup_umip(struct cpuinfo_x86 *c) cr4_clear_bits(X86_CR4_UMIP); } +static __always_inline void setup_lass(struct cpuinfo_x86 *c) +{ + if (cpu_feature_enabled(X86_FEATURE_LASS)) { + cr4_set_bits(X86_CR4_LASS); + } else { + /* + * only clear the feature and cr4 bits when hardware + * supports LASS, in case it was enabled in a previous + * boot (e.g., via kexec) + */ + if (cpu_has(c, X86_FEATURE_LASS)) { + cr4_clear_bits(X86_CR4_LASS); + clear_cpu_cap(c, X86_FEATURE_LASS); + } + } +} + /* These bits should not change their value after CPU init is finished. */ static const unsigned long cr4_pinned_mask = X86_CR4_SMEP | X86_CR4_SMAP | X86_CR4_UMIP | @@ -1848,6 +1865,7 @@ static void identify_cpu(struct cpuinfo_x86 *c) setup_smep(c); setup_smap(c); setup_umip(c); + setup_lass(c); /* Enable FSGSBASE instructions if available. */ if (cpu_has(c, X86_FEATURE_FSGSBASE)) { -- 2.34.1
| |