https://git.reactos.org/?p=reactos.git;a=commitdiff;h=6a6b383abd2ac86746fdad...
commit 6a6b383abd2ac86746fdadb0522aadef37328caf Author: Stanislav Motylkov x86corez@gmail.com AuthorDate: Fri Jun 30 17:16:54 2023 +0300 Commit: Stanislav Motylkov x86corez@gmail.com CommitDate: Sun Jul 2 21:00:31 2023 +0300
[NTOS:KE] Report x86 CPU features in a separate function
KiGetFeatureBits() is now being called in the early boot phase 0 when the Kernel Debugger is not yet initialized, so debug prints are not available here. Move the debug prints into a new function and call it at the right time. CORE-18023 --- ntoskrnl/include/internal/i386/ke.h | 6 +++ ntoskrnl/ke/i386/cpu.c | 80 +++++++++++++++++++++++-------------- ntoskrnl/ke/i386/kiinit.c | 6 +++ 3 files changed, 62 insertions(+), 30 deletions(-)
diff --git a/ntoskrnl/include/internal/i386/ke.h b/ntoskrnl/include/internal/i386/ke.h index cc8bca420bf..30509248a2b 100644 --- a/ntoskrnl/include/internal/i386/ke.h +++ b/ntoskrnl/include/internal/i386/ke.h @@ -459,6 +459,12 @@ ULONG NTAPI KiGetFeatureBits(VOID);
+#if DBG +CODE_SEG("INIT") +VOID +KiReportCpuFeatures(VOID); +#endif + VOID NTAPI KiThreadStartup(VOID); diff --git a/ntoskrnl/ke/i386/cpu.c b/ntoskrnl/ke/i386/cpu.c index d4634cbe33b..a39d27a2139 100644 --- a/ntoskrnl/ke/i386/cpu.c +++ b/ntoskrnl/ke/i386/cpu.c @@ -380,11 +380,6 @@ KiGetFeatureBits(VOID) if (CpuFeatures & X86_FEATURE_SSE) FeatureBits |= KF_XMMI; if (CpuFeatures & X86_FEATURE_SSE2) FeatureBits |= KF_XMMI64;
- if (CpuFeatures & X86_FEATURE_PAE) - { - DPRINT1("Support PAE\n"); - } - /* Check if the CPU has hyper-threading */ if (CpuFeatures & X86_FEATURE_HT) { @@ -430,35 +425,60 @@ KiGetFeatureBits(VOID) } }
-#define print_supported(kf_value) ((FeatureBits & kf_value) ? #kf_value : "") - DPRINT1("Supported CPU features : %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s\n", - print_supported(KF_V86_VIS), - print_supported(KF_RDTSC), - print_supported(KF_CR4), - print_supported(KF_CMOV), - print_supported(KF_GLOBAL_PAGE), - print_supported(KF_LARGE_PAGE), - print_supported(KF_MTRR), - print_supported(KF_CMPXCHG8B), - print_supported(KF_MMX), - print_supported(KF_WORKING_PTE), - print_supported(KF_PAT), - print_supported(KF_FXSR), - print_supported(KF_FAST_SYSCALL), - print_supported(KF_XMMI), - print_supported(KF_3DNOW), - print_supported(KF_AMDK6MTRR), - print_supported(KF_XMMI64), - print_supported(KF_DTS), - print_supported(KF_NX_BIT), - print_supported(KF_NX_DISABLED), - print_supported(KF_NX_ENABLED)); -#undef print_supported - /* Return the Feature Bits */ return FeatureBits; }
+#if DBG +CODE_SEG("INIT") +VOID +KiReportCpuFeatures(VOID) +{ + ULONG CpuFeatures = 0; + CPU_INFO CpuInfo; + + if (KiGetCpuVendor()) + { + KiCpuId(&CpuInfo, 1); + CpuFeatures = CpuInfo.Edx; + } + + DPRINT1("Supported CPU features: "); + +#define print_kf_bit(kf_value) if (KeFeatureBits & kf_value) DbgPrint(#kf_value " ") + print_kf_bit(KF_V86_VIS); + print_kf_bit(KF_RDTSC); + print_kf_bit(KF_CR4); + print_kf_bit(KF_CMOV); + print_kf_bit(KF_GLOBAL_PAGE); + print_kf_bit(KF_LARGE_PAGE); + print_kf_bit(KF_MTRR); + print_kf_bit(KF_CMPXCHG8B); + print_kf_bit(KF_MMX); + print_kf_bit(KF_WORKING_PTE); + print_kf_bit(KF_PAT); + print_kf_bit(KF_FXSR); + print_kf_bit(KF_FAST_SYSCALL); + print_kf_bit(KF_XMMI); + print_kf_bit(KF_3DNOW); + print_kf_bit(KF_AMDK6MTRR); + print_kf_bit(KF_XMMI64); + print_kf_bit(KF_DTS); + print_kf_bit(KF_NX_BIT); + print_kf_bit(KF_NX_DISABLED); + print_kf_bit(KF_NX_ENABLED); +#undef print_kf_bit + +#define print_cf(cpu_flag) if (CpuFeatures & cpu_flag) DbgPrint(#cpu_flag " ") + print_cf(X86_FEATURE_PAE); + print_cf(X86_FEATURE_APIC); + print_cf(X86_FEATURE_HT); +#undef print_cf + + DbgPrint("\n"); +} +#endif // DBG + CODE_SEG("INIT") VOID NTAPI diff --git a/ntoskrnl/ke/i386/kiinit.c b/ntoskrnl/ke/i386/kiinit.c index a83afe72c70..9699d11b03c 100644 --- a/ntoskrnl/ke/i386/kiinit.c +++ b/ntoskrnl/ke/i386/kiinit.c @@ -480,6 +480,12 @@ KiInitializeKernel(IN PKPROCESS InitProcess, /* Save CPU state */ KiSaveProcessorControlState(&Prcb->ProcessorState);
+#if DBG + /* Print applied kernel features/policies and boot CPU features */ + if (Number == 0) + KiReportCpuFeatures(); +#endif + /* Get cache line information for this CPU */ KiGetCacheInformation();