From 62185452f0b763227520a8fe50cc8687b755efeb Mon Sep 17 00:00:00 2001 From: Linus Groh Date: Fri, 8 Apr 2022 18:25:38 +0100 Subject: 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. --- Kernel/Arch/x86/common/Processor.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'Kernel/Arch') 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) -- cgit v1.2.3