mirror of
https://github.com/reactos/reactos.git
synced 2024-12-28 18:15:11 +00:00
[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
This commit is contained in:
parent
00715ccf8b
commit
6a6b383abd
3 changed files with 62 additions and 30 deletions
|
@ -459,6 +459,12 @@ ULONG
|
||||||
NTAPI
|
NTAPI
|
||||||
KiGetFeatureBits(VOID);
|
KiGetFeatureBits(VOID);
|
||||||
|
|
||||||
|
#if DBG
|
||||||
|
CODE_SEG("INIT")
|
||||||
|
VOID
|
||||||
|
KiReportCpuFeatures(VOID);
|
||||||
|
#endif
|
||||||
|
|
||||||
VOID
|
VOID
|
||||||
NTAPI
|
NTAPI
|
||||||
KiThreadStartup(VOID);
|
KiThreadStartup(VOID);
|
||||||
|
|
|
@ -380,11 +380,6 @@ KiGetFeatureBits(VOID)
|
||||||
if (CpuFeatures & X86_FEATURE_SSE) FeatureBits |= KF_XMMI;
|
if (CpuFeatures & X86_FEATURE_SSE) FeatureBits |= KF_XMMI;
|
||||||
if (CpuFeatures & X86_FEATURE_SSE2) FeatureBits |= KF_XMMI64;
|
if (CpuFeatures & X86_FEATURE_SSE2) FeatureBits |= KF_XMMI64;
|
||||||
|
|
||||||
if (CpuFeatures & X86_FEATURE_PAE)
|
|
||||||
{
|
|
||||||
DPRINT1("Support PAE\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Check if the CPU has hyper-threading */
|
/* Check if the CPU has hyper-threading */
|
||||||
if (CpuFeatures & X86_FEATURE_HT)
|
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 the Feature Bits */
|
||||||
return FeatureBits;
|
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")
|
CODE_SEG("INIT")
|
||||||
VOID
|
VOID
|
||||||
NTAPI
|
NTAPI
|
||||||
|
|
|
@ -480,6 +480,12 @@ KiInitializeKernel(IN PKPROCESS InitProcess,
|
||||||
/* Save CPU state */
|
/* Save CPU state */
|
||||||
KiSaveProcessorControlState(&Prcb->ProcessorState);
|
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 */
|
/* Get cache line information for this CPU */
|
||||||
KiGetCacheInformation();
|
KiGetCacheInformation();
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue