From 389bf8288909c36547f4872720cba479883903ae Mon Sep 17 00:00:00 2001 From: Gunnar Beutner Date: Sat, 26 Jun 2021 04:21:51 +0200 Subject: [PATCH] Kernel: Add CPUID flag for long mode This isn't particularly useful because by the time we've entered init() the CPU had better support x86_64 anyway. However this shows the CPU flag in System Monitor - even in 32-bit mode. --- Kernel/Arch/x86/CPUID.h | 1 + Kernel/Arch/x86/common/Processor.cpp | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/Kernel/Arch/x86/CPUID.h b/Kernel/Arch/x86/CPUID.h index 5b094012aa..dc130b849d 100644 --- a/Kernel/Arch/x86/CPUID.h +++ b/Kernel/Arch/x86/CPUID.h @@ -53,6 +53,7 @@ enum class CPUFeature : u32 { XSAVE = (1 << 21), AVX = (1 << 22), FXSR = (1 << 23), + LM = (1 << 24), }; } diff --git a/Kernel/Arch/x86/common/Processor.cpp b/Kernel/Arch/x86/common/Processor.cpp index fd1b7e1f19..46757a6125 100644 --- a/Kernel/Arch/x86/common/Processor.cpp +++ b/Kernel/Arch/x86/common/Processor.cpp @@ -109,6 +109,8 @@ UNMAP_AFTER_INIT void Processor::cpu_detect() set_feature(CPUFeature::NX); if (extended_processor_info.edx() & (1 << 27)) set_feature(CPUFeature::RDTSCP); + if (extended_processor_info.edx() & (1 << 29)) + set_feature(CPUFeature::LM); if (extended_processor_info.edx() & (1 << 11)) { // Only available in 64 bit mode set_feature(CPUFeature::SYSCALL); @@ -260,6 +262,8 @@ String Processor::features_string() const return "xsave"; case CPUFeature::AVX: return "avx"; + case CPUFeature::LM: + return "lm"; // no default statement here intentionally so that we get // a warning if a new feature is forgotten to be added here }