Parcourir la source

Kernel: Add support for hypervisor CPUID feature

Jean-Baptiste Boric il y a 4 ans
Parent
commit
4cc346fb19
2 fichiers modifiés avec 5 ajouts et 0 suppressions
  1. 1 0
      Kernel/Arch/x86/CPUID.h
  2. 4 0
      Kernel/Arch/x86/common/Processor.cpp

+ 1 - 0
Kernel/Arch/x86/CPUID.h

@@ -54,6 +54,7 @@ enum class CPUFeature : u32 {
     AVX = (1 << 22),
     FXSR = (1 << 23),
     LM = (1 << 24),
+    HYPERVISOR = (1 << 25),
 };
 
 }

+ 4 - 0
Kernel/Arch/x86/common/Processor.cpp

@@ -93,6 +93,8 @@ UNMAP_AFTER_INIT void Processor::cpu_detect()
         set_feature(CPUFeature::AVX);
     if (processor_info.ecx() & (1 << 30))
         set_feature(CPUFeature::RDRAND);
+    if (processor_info.ecx() & (1u << 31))
+        set_feature(CPUFeature::HYPERVISOR);
     if (processor_info.edx() & (1 << 11)) {
         u32 stepping = processor_info.eax() & 0xf;
         u32 model = (processor_info.eax() >> 4) & 0xf;
@@ -266,6 +268,8 @@ String Processor::features_string() const
             return "avx";
         case CPUFeature::LM:
             return "lm";
+        case CPUFeature::HYPERVISOR:
+            return "hypervisor";
             // no default statement here intentionally so that we get
             // a warning if a new feature is forgotten to be added here
         }