diff options
author | Linus Groh <mail@linusgroh.de> | 2022-04-08 18:25:38 +0100 |
---|---|---|
committer | Linus Groh <mail@linusgroh.de> | 2022-04-08 18:53:42 +0100 |
commit | 62185452f0b763227520a8fe50cc8687b755efeb (patch) | |
tree | 8d223856545076060e2dc5307362bff303e7135a /Kernel/Arch | |
parent | 87aabb5ef76f543f23e98a88c2bd6902ee5a5bed (diff) | |
download | serenity-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.cpp | 8 |
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) |