summaryrefslogtreecommitdiff
path: root/Kernel/Arch
diff options
context:
space:
mode:
authorLinus Groh <mail@linusgroh.de>2022-04-08 18:25:38 +0100
committerLinus Groh <mail@linusgroh.de>2022-04-08 18:53:42 +0100
commit62185452f0b763227520a8fe50cc8687b755efeb (patch)
tree8d223856545076060e2dc5307362bff303e7135a /Kernel/Arch
parent87aabb5ef76f543f23e98a88c2bd6902ee5a5bed (diff)
downloadserenity-62185452f0b763227520a8fe50cc8687b755efeb.zip
Kernel: Query OS-enabled CPUID features again at the end of cpu_setup()
For OSPKE this is a no-op as we don't enable PKU yet, but the state of the OSXSAVE flag might have changed if we enabled XSAVE.
Diffstat (limited to 'Kernel/Arch')
-rw-r--r--Kernel/Arch/x86/common/Processor.cpp8
1 files changed, 8 insertions, 0 deletions
diff --git a/Kernel/Arch/x86/common/Processor.cpp b/Kernel/Arch/x86/common/Processor.cpp
index a55a7dd4e5..32f038712d 100644
--- a/Kernel/Arch/x86/common/Processor.cpp
+++ b/Kernel/Arch/x86/common/Processor.cpp
@@ -594,6 +594,14 @@ UNMAP_AFTER_INIT void Processor::cpu_setup()
MSR sfmask_msr(MSR_SFMASK);
sfmask_msr.set(rflags_mask);
#endif
+
+ // Query OS-enabled CPUID features again, and set the flags if needed.
+ CPUID processor_info(0x1);
+ if (processor_info.ecx() & (1 << 27))
+ m_features |= CPUFeature::OSXSAVE;
+ CPUID extended_features(0x7);
+ if (extended_features.ecx() & (1 << 4))
+ m_features |= CPUFeature::OSPKE;
}
UNMAP_AFTER_INIT void Processor::early_initialize(u32 cpu)