Author: jgardou
Date: Mon Mar 7 13:33:10 2011
New Revision: 50991
URL:
http://svn.reactos.org/svn/reactos?rev=50991&view=rev
Log:
[NTOSKRNL]
- Print supported CPU features.
- Simplify detection of non working but claimed SYSENTER support for intel processors
- Workaround a virtualbox "feature" : claim that SYSENTER isn't supported
despite the fact that it is.
Fix hang on registration of mshtml.dll in 2nd stage when using Virtualbox.
Modified:
trunk/reactos/ntoskrnl/ke/i386/cpu.c
Modified: trunk/reactos/ntoskrnl/ke/i386/cpu.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/ke/i386/cpu.c?rev…
==============================================================================
--- trunk/reactos/ntoskrnl/ke/i386/cpu.c [iso-8859-1] (original)
+++ trunk/reactos/ntoskrnl/ke/i386/cpu.c [iso-8859-1] Mon Mar 7 13:33:10 2011
@@ -303,10 +303,16 @@
/* Remove support for correct PTE support. */
FeatureBits &= ~KF_WORKING_PTE;
}
+
+ /* Virtualbox claims to have no SYSENTER support,
+ * which is false for processors >= Pentium Pro */
+ if(Prcb->CpuType >= 6)
+ {
+ Reg[3] |= 0x800;
+ }
/* Check if the CPU is too old to support SYSENTER */
- if ((Prcb->CpuType < 6) ||
- ((Prcb->CpuType == 6) && (Prcb->CpuStep < 0x0303)))
+ if ((Reg[0] & 0x0FFF3FFF) < 0x00000633)
{
/* Disable it */
Reg[3] &= ~0x800;
@@ -474,6 +480,32 @@
}
}
}
+
+ DPRINT1("Supported CPU features :\n");
+#define print_supported(kf_value) \
+ if(FeatureBits & kf_value) DPRINT1("\t" #kf_value "\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;